以Apollo服务器作为中间件,模拟MQTT客户端,MQTT订阅接受消息
来源:互联网 发布:淘宝卖iphone靠谱的店 编辑:程序博客网 时间:2024/05/18 02:51
一、Windows下安装Apollo
下载链接:http://activemq.apache.org/apollo/download.html
解压至C:\ 根目录下(可自选)本文以C盘根目录为例
二、创建apollo实例,如图操作:
打开cmd,编辑命令
三、启动apollo实例(cmd命令切换至刚创建的实例目录下的bin目录下敲入 apollo-broker run),如下图可看到apollo的启动情况
可进入http://localhost:61680 查看apollo后台(登录名默认为admin 密码为password)
四、创建模拟发送消息的客户端,代码如下
package com.vin.foo;import org.fusesource.hawtbuf.Buffer;import org.fusesource.hawtbuf.UTF8Buffer;import org.fusesource.mqtt.client.FutureConnection;import org.fusesource.mqtt.client.MQTT;import org.fusesource.mqtt.client.QoS;public class MQTTClient {public static void main(String[] args) throws Exception {sendMessage("hello");}public static void sendMessage(String message) {String user = env("APOLLO_USER", "admin");String password = env("APOLLO_PASSWORD", "password");String host = env("APOLLO_HOST", "localhost");//apollo服务器地址int port = 61613;//apollo端口号String destination = "/topic/1/OOOOOOOOOO/aaaa";//topicBuffer msg = new UTF8Buffer(message);MQTT mqtt = new MQTT();//新建MQTTtry {mqtt.setHost(host, port);mqtt.setUserName(user);mqtt.setPassword(password);FutureConnection connection = mqtt.futureConnection();connection.connect().await();UTF8Buffer topic = new UTF8Buffer(destination);connection.publish(topic, msg, QoS.AT_LEAST_ONCE, false);connection.disconnect().await();} catch (Exception e) {e.printStackTrace();} finally {// System.exit(0);}}private static String env(String key, String defaultValue) {String rc = System.getenv(key);if (rc == null) {return defaultValue;}return rc;}}</span>
五、创建接受消息的订阅者</span>
/** * Licensed to the Apache Software Foundation (ASF) under one or more */package com.vin.foo;import org.fusesource.hawtbuf.Buffer;import org.fusesource.hawtbuf.UTF8Buffer;import org.fusesource.mqtt.client.Callback;import org.fusesource.mqtt.client.CallbackConnection;import org.fusesource.mqtt.client.Listener;import org.fusesource.mqtt.client.MQTT;import org.fusesource.mqtt.client.QoS;import org.fusesource.mqtt.client.Topic;/** * Uses an callback based interface to MQTT. Callback based interfaces are * harder to use but are slightly more efficient. */class MQTTListener {public static void main(String[] args) throws Exception {String user = env("APOLLO_USER", "admin");String password = env("APOLLO_PASSWORD", "password");String host = env("APOLLO_HOST", "localhost");int port = Integer.parseInt(env("APOLLO_PORT", "61613"));final String destination = arg(args, 0, "/topic/1/OOOOOOOOOO/aaaa");MQTT mqtt = new MQTT();mqtt.setHost(host, port);mqtt.setUserName(user);mqtt.setPassword(password);mqtt.setKeepAlive((short) 30);// mqtt.setCleanSession(false);// mqtt.setClientId("aaaa");final CallbackConnection connection = mqtt.callbackConnection();connection.listener(new Listener() {public void onConnected() {}public void onDisconnected() {}public void onFailure(Throwable value) {value.printStackTrace();System.exit(-2);}public void onPublish(UTF8Buffer topic, Buffer msg, Runnable ack) {String body = msg.utf8().toString();System.out.println(body);ack.run();}});connection.connect(new Callback<Void>() {@Overridepublic void onSuccess(Void value) {Topic[] topics = { new Topic(destination, QoS.AT_LEAST_ONCE) };connection.subscribe(topics, new Callback<byte[]>() {public void onSuccess(byte[] qoses) {System.out.println("connected...");}public void onFailure(Throwable value) {value.printStackTrace();System.exit(-2);}});}@Overridepublic void onFailure(Throwable value) {value.printStackTrace();System.exit(-2);}});// Wait forever..synchronized (MQTTListener.class) {while (true) {MQTTListener.class.wait();}}}private static String env(String key, String defaultValue) {String rc = System.getenv(key);if (rc == null) {return defaultValue;}return rc;}private static String arg(String[] args, int index, String defaultValue) {if (index < args.length) {return args[index];} else {return defaultValue;}}}
</pre><pre name="code" class="java">六、运行MQTTListener,可建立一个topic长连接/topic/1/OOOOOOOOOO/aaaa,运行MQTTClient可向订阅者/topic/1/OOOOOOOOOO/aaaa发送一个“hello”消息。可在后台查看连接状态,也可在java控制台看到接受的消息。</span>
代码中具体各参数的定义请参考我上一篇转载MQTT协议规范的文章
0 1
- 以Apollo服务器作为中间件,模拟MQTT客户端,MQTT订阅接受消息
- MQTT消息服务器搭建--Apollo
- MQTT服务器搭建--Apollo
- MQTT服务器搭建--Apollo
- C# 接受MQTT服务器推送的消息
- mqtt消息推送中间件服务器软件评价
- mqtt消息推送中间件服务器软件评价
- mqtt消息推送中间件服务器软件评价
- MQTT消息协议、服务器及其客户端
- MQTT的学习研究(六) MQTT moquette 的 Blocking API 订阅消息客户端使用
- MQTT的学习研究(6)MQTT 订阅消息客户端使用
- MQTT的学习研究(六) MQTT moquette 的 Blocking API 订阅消息客户端使用
- 如何利用apache-apollo构建MQTT服务器
- Linux学习~部署Apollo服务器(mqtt)
- 开源MQTT消息服务器
- apollo mqtt 搭建
- [iOS MQTT消息订阅] MQTTClient框架
- MQTT之阿里云接受推送消息
- C语言register关键字
- MSZBSQL面试题1
- Android之Drawable Animation
- QT开发安装中文问题
- Grab Cut学习笔记2(GraphCut)
- 以Apollo服务器作为中间件,模拟MQTT客户端,MQTT订阅接受消息
- Linux下iptables的NAT功能实现路由器
- 如何取到js异步函数的回调函数里的值?
- iOS6之后 NSAttributedString
- MSZBSQL面试题2
- 西电校园搜索引擎(2)
- 去IOE
- [Leetcode] 9. Palindrome Number
- 查询Linux系统最后重启时间的三个方法