emqttd java代码测试【转】
来源:互联网 发布:财务报表数据分析方法 编辑:程序博客网 时间:2024/06/05 08:26
来自:http://blog.csdn.net/zhu_tianwei/article/details/49178167
emqttd 集群在上一节我们已经配置完毕。emqttd默认占用1883端口用于MQTT连接,8083端口用于HTTP接口,通过HTTP接口从应用程序向MQTT客户端发布消息。下面我们通过Java实现消息的发布和订阅。
1.pom
使用mqtt-client java客户端,添加依赖jar
- <dependency>
- <groupId>org.fusesource.mqtt-client</groupId>
- <artifactId>mqtt-client</artifactId>
- <version>1.12</version>
- </dependency>
2.代码实现订阅者订阅node2节点端口
- package mqtt;
-
- import java.net.URISyntaxException;
-
- import org.fusesource.mqtt.client.Future;
- import org.fusesource.mqtt.client.FutureConnection;
- import org.fusesource.mqtt.client.MQTT;
- import org.fusesource.mqtt.client.Message;
- import org.fusesource.mqtt.client.QoS;
- import org.fusesource.mqtt.client.Topic;
-
-
-
-
- public class Client {
-
- private final static String CONNECTION_STRING = "tcp://192.168.1.91:1883";
- private final static boolean CLEAN_START = true;
- private final static short KEEP_ALIVE = 30;
- private final static String CLIENT_ID = "client";
- public static Topic[] topics = {
- new Topic("mqtt/aaa", QoS.EXACTLY_ONCE),
- new Topic("mqtt/bbb", QoS.AT_LEAST_ONCE),
- new Topic("mqtt/ccc", QoS.AT_MOST_ONCE) };
-
- public final static long RECONNECTION_ATTEMPT_MAX = 6;
- public final static long RECONNECTION_DELAY = 2000;
-
- public final static int SEND_BUFFER_SIZE = 64 ;
-
- public static void main(String[] args) {
-
- MQTT mqtt = new MQTT();
- try {
-
- mqtt.setHost(CONNECTION_STRING);
-
- mqtt.setCleanSession(CLEAN_START);
-
- mqtt.setReconnectAttemptsMax(RECONNECTION_ATTEMPT_MAX);
-
- mqtt.setReconnectDelay(RECONNECTION_DELAY);
-
- mqtt.setKeepAlive(KEEP_ALIVE);
-
- mqtt.setSendBufferSize(SEND_BUFFER_SIZE);
-
- mqtt.setClientId(CLIENT_ID);
-
-
- final FutureConnection connection = mqtt.futureConnection();
- connection.connect();
- connection.subscribe(topics);
- while (true) {
- Future<Message> futrueMessage = connection.receive();
- Message message = futrueMessage.await();
- System.out.println("MQTTFutureClient.Receive Message " + "Topic Title :" + message.getTopic() + " context :"
- + String.valueOf(message.getPayloadBuffer()));
- }
- } catch (URISyntaxException e) {
- e.printStackTrace();
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- }
- }
-
- }
发布者通过node1发布消息
- package mqtt;
-
- import java.net.URISyntaxException;
-
- import org.fusesource.mqtt.client.FutureConnection;
- import org.fusesource.mqtt.client.MQTT;
- import org.fusesource.mqtt.client.QoS;
- import org.fusesource.mqtt.client.Topic;
-
-
-
-
- public class Server {
-
- private final static String CONNECTION_STRING = "tcp://192.168.1.90:1883";
- private final static boolean CLEAN_START = true;
- private final static String CLIENT_ID = "server";
- private final static short KEEP_ALIVE = 30;
-
- public static Topic[] topics = {
- new Topic("mqtt/aaa", QoS.EXACTLY_ONCE),
- new Topic("mqtt/bbb", QoS.AT_LEAST_ONCE),
- new Topic("mqtt/ccc", QoS.AT_MOST_ONCE) };
-
- public final static long RECONNECTION_ATTEMPT_MAX = 6;
- public final static long RECONNECTION_DELAY = 2000;
-
- public final static int SEND_BUFFER_SIZE = 64;
-
- public static void main(String[] args) {
- MQTT mqtt = new MQTT();
- try {
-
-
- mqtt.setHost(CONNECTION_STRING);
-
- mqtt.setCleanSession(CLEAN_START);
-
- mqtt.setKeepAlive(KEEP_ALIVE);
-
-
- mqtt.setClientId(CLIENT_ID);
-
-
-
- mqtt.setReconnectAttemptsMax(RECONNECTION_ATTEMPT_MAX);
-
- mqtt.setReconnectDelay(RECONNECTION_DELAY);
-
- mqtt.setSendBufferSize(SEND_BUFFER_SIZE);
-
- mqtt.setTrafficClass(8);
-
-
- mqtt.setMaxReadRate(0);
- mqtt.setMaxWriteRate(0);
-
-
- final FutureConnection connection= mqtt.futureConnection();
- connection.connect();
- int count=1;
- while(true){
- count++;
-
-
- String message="Hello "+count+" MQTT...";
- String topic = "mqtt/bbb";
- connection.publish(topic, message.getBytes(), QoS.AT_LEAST_ONCE,
- false);
- System.out.println("MQTTFutureServer.publish Message "+"Topic Title :"+topic+" context :"+message);
- }
- } catch (URISyntaxException e) {
- e.printStackTrace();
- } catch (Exception e) {
- e.printStackTrace();
- }finally{
- }
- }
-
- }
运行代码测试正常接收、发布消息。也可以通过http请求的方式发布消息,如下:curl -v --basic -u user:passwd -d "qos=2&retain=0&topic=mqtt/aaa&message=hello" -k http://192.168.1.90:8083/mqtt/publish
Name | Description | clientClientIdqosQoS(0, 1, 2)retainRetain(0, 1)topicTopicmessageMessage没有添加认证,用户密码可以随便填写。RETAIN(保持)
仅针对PUBLISH消息。不同值,不同含义:
1:表示发送的消息需要一直持久保存(不受服务器重启影响),不但要发送给当前的订阅者,并且以后新来的订阅了此Topic name的订阅者会马上得到推送。
备注:新来乍到的订阅者,只会取出最新的一个RETAIN flag = 1的消息推送。
0:仅仅为当前订阅者推送此消息。
假如服务器收到一个空消息体(zero-length payload)、RETAIN = 1、已存在Topic name的PUBLISH消息,服务器可以删除掉对应的已被持久化的PUBLISH消息。
参考:https://github.com/emqtt/emqttd/wiki/HTTP%20Publish
0 0