以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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 日上免税店提货日期写错了怎么办 微信公众平台账号名密码忘了怎么办 有人扬言要搞垮我的店铺怎么办 招行信用卡签到积分未领取怎么办 怎么办照片发送到邮微信箱里去 苹果手机备忘录没刪除就没了怎么办 因恶意刷公众号而被微信封号怎么办 禁停路段发生剐蹭怎么办办 新三板公司退市了 小股东怎么办? 爱用商城发货没有物流信息怎么办 拼多多的快递的运单号发错了怎么办 追光娱乐账号被别人盗用了怎么办啊 用鲁大师检测硬盘出现损坏怎么办 客户拖款迟迟不给给怎么办 百度云盘文件密码忘记了怎么办 用来注册亚马逊的公司注销了怎么办 亚马逊中国卖家太多美国卖家怎么办 付款了!卖家不想卖了怎么办? 手机通讯录同步助手密码忘了怎么办 毕业生学位信息照片上传错了怎么办 报名计算机二级照片上传很慢怎么办 网上报名时照片上传错了怎么办 特岗教师报名时照片上传模糊怎么办 百家号申请过新手被拒绝三次怎么办 6岁儿童个子高不长肉体形瘦怎么办 网页游戏加载完毕卡了不动怎么办 小番茄未成熟下面就坏掉是怎么办 千牛快捷短语界面变得好宽怎么办 申请大王卡手机号填错了怎么办 别人盗用我手机号申请微信号怎么办 淘宝支付宝里没钱了买家退款怎么办 如果外包把员工社保忘交了怎么办 外包工人没有和包工头的证据怎么办 试用期辞职公司给交的社保怎么办 单位给交员工不想交社保怎么办 淘宝收不到卖家的信息怎么办 不小心把微信聊天记录删掉了怎么办 不小心把打印机驱动删除了怎么办 蓝牙不小心点到忽略此设备怎么办 千牛工作台无线开店确认不了怎么办 开通诚信通后营业执照注销了怎么办