MQTT通讯及Apollo服务器的搭建

MQTT通讯及服务器的搭建

Apollo服务器的搭建

1:Apollo服务器下载

1.    首先从http://activemq.apache.org/apollo/download.html官网上下载windows对应的apollo版本,本文下载的是apache-apollo-1.7.1-windows-distro.zip 版本。windows的版本为win10JDK版本1.8

MQTT通讯及Apollo服务器的搭建_第1张图片

MQTT通讯及Apollo服务器的搭建_第2张图片

2.解压到C:\apache-apollo下,此时会多出一个apache-apollo-1.7.1文件夹。

3.然后以管理员的身份运行cmd,进入到如下目录C:\apache-apollo\apache-apollo-1.7.1\bin,如下图所示:


4.然后就是要创建broker,这里是创建在C:\apache-apollo\broker

的目录下,执行如下命令:apollo create myapolloC:\apache-apollo\broker


5.broker创建成功的提示如下图所示:

MQTT通讯及Apollo服务器的搭建_第3张图片

6.创建完broker之后就是要运行apollo,进入C:\apache-apollo\broker\bin目录下,执行如下命令:apollo-brokerrun


7.apollo运行成功的提示,如下图所示:

MQTT通讯及Apollo服务器的搭建_第4张图片

8.最后打开浏览器,输入网址http://127.0.0.1:61680/,即可看到如下页面,默认

MQTT通讯及Apollo服务器的搭建_第5张图片

账号:admin   密码:password

9.登录成功之后的页面,控制台页面如下图所示

MQTT通讯及Apollo服务器的搭建_第6张图片

 

测试demo—服务器端代码---需要下载并引入mqttv3jar包

import org.eclipse.paho.client.mqttv3.MqttClient;

import org.eclipse.paho.client.mqttv3.MqttConnectOptions;

import org.eclipse.paho.client.mqttv3.MqttDeliveryToken;

import org.eclipse.paho.client.mqttv3.MqttException;

import org.eclipse.paho.client.mqttv3.MqttMessage;

import org.eclipse.paho.client.mqttv3.MqttPersistenceException;

import org.eclipse.paho.client.mqttv3.MqttTopic;

import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;

 

publicclass MqttServerTest {

    publicstaticfinal String HOST = "tcp://127.0.0.1:61613";

    publicstaticfinal String TOPIC = "toclient/124";

    publicstaticfinal String TOPIC125 = "toclient/125";

    privatestaticfinal String clientid = "server-id-0";

   

    private MqttClient client;

    private MqttTopic topic;

    private MqttTopic topic125;

    private String userName = "admin";

    private String passWord = "password";

 

    private MqttMessage message;

 

    public MqttServerTest() throws MqttException {

       // MemoryPersistence设置clientid的保存形式,默认为以内存保存

       client = new MqttClient(HOST, clientid, newMemoryPersistence());

       connect();

    }

 

    privatevoid connect() {

       MqttConnectOptions options = new MqttConnectOptions();

        options.setCleanSession(false);

       options.setUserName(userName);

       options.setPassword(passWord.toCharArray());

       // 设置超时时间

       options.setConnectionTimeout(10);

       // 设置会话心跳时间

       options.setKeepAliveInterval(20);

       try {

           client.setCallback(new PushCallBack());

           client.connect(options);

           topic = client.getTopic(TOPIC);

           topic125 = client.getTopic(TOPIC125);

       } catch (Exception e) {

           e.printStackTrace();

       }

    }

 

    publicvoid publish(MqttTopic topic, MqttMessage message)

           throws MqttPersistenceException, MqttException {

       MqttDeliveryToken token = topic.publish(message);

       token.waitForCompletion();

       System.out.println("message ispublished completely! "

              + token.isComplete());

    }

 

    publicstaticvoid main(String[] args) throws MqttException {

       MqttServerTest server = new MqttServerTest();

 

       server.message = new MqttMessage();

       server.message.setQos(2);

       server.message.setRetained(true);

       server.message.setPayload("给客户端124推送的信息".getBytes());

       server.publish(server.topic, server.message);

 

       server.message = new MqttMessage();

       server.message.setQos(2);

       server.message.setRetained(true);

       server.message.setPayload("给客户端125推送的信息".getBytes());

       server.publish(server.topic125, server.message);

 

       System.out.println(server.message.isRetained() + "------ratained状态");

    }

}

测试demo—客户端代码—需引入mqttv3jar包

1测试类一 代表 客户端client124

importjava.util.concurrent.ScheduledExecutorService;

 

importorg.eclipse.paho.client.mqttv3.MqttClient;

import org.eclipse.paho.client.mqttv3.MqttConnectOptions;

importorg.eclipse.paho.client.mqttv3.MqttException;

importorg.eclipse.paho.client.mqttv3.MqttTopic;

importorg.eclipse.paho.client.mqttv3.persist.MemoryPersistence;

 

public class MqttClientTest {

       publicstatic final String HOST = "tcp://127.0.0.1:61613";

       publicstatic final String TOPIC = "toclient/124";

       privatestatic final String clientid = "client124";

       privateMqttClient client;

       privateMqttConnectOptions options;

       privateString userName = "admin";

       privateString passWord = "password";

 

       privateScheduledExecutorService scheduler;

 

       privatevoid start() {

              try{

                     //host为主机名,clientid即连接MQTT的客户端ID,一般以唯一标识符表示,MemoryPersistence设置clientid的保存形式,默认为以内存保存

                     client= new MqttClient(HOST, clientid, new MemoryPersistence());

                     //MQTT的连接设置

                     options= new MqttConnectOptions();

                     //设置是否清空session,这里如果设置为false表示服务器会保留客户端的连接记录,这里设置为true表示每次连接到服务器都以新的身份连接

                     options.setCleanSession(true);

                     //设置连接的用户名

                     options.setUserName(userName);

                     //设置连接的密码

                     options.setPassword(passWord.toCharArray());

                     //设置超时时间 单位为秒

                     options.setConnectionTimeout(10);

                     //设置会话心跳时间 单位为秒 服务器会每隔1.5*20秒的时间向客户端发送个消息判断客户端是否在线,但这个方法并没有重连的机制

                     options.setKeepAliveInterval(20);

                     //设置回调

                     client.setCallback(newPushCallBack());

                     MqttTopictopic = client.getTopic(TOPIC);

                     //setWill方法,如果项目中需要知道客户端是否掉线可以调用该方法。设置最终端口的通知消息

                     options.setWill(topic,"close".getBytes(), 2, true);

 

                     client.connect(options);

                     //订阅消息

                     int[]Qos = { 1 };

                     String[]topic1 = { TOPIC };

                     client.subscribe(topic1,Qos);

 

              }catch (Exception e) {

                     e.printStackTrace();

              }

       }

 

       publicstatic void main(String[] args) throws MqttException {

              MqttClientTestclient = new MqttClientTest();

              client.start();

       }

}

2测试类二 代表 客户端client125

回调类demo---需要引入mqttv3jar包

importorg.eclipse.paho.client.mqttv3.IMqttDeliveryToken;

importorg.eclipse.paho.client.mqttv3.MqttCallback;

importorg.eclipse.paho.client.mqttv3.MqttMessage;

 

public class PushCallBack implementsMqttCallback{

       publicvoid connectionLost(Throwable cause) {

              //连接丢失后,一般在这里面进行重连

              System.out.println("连接断开,可以做重连");

       }

 

       publicvoid deliveryComplete(IMqttDeliveryToken token) {

              System.out.println("deliveryComplete---------"+ token.isComplete());

       }

 

       publicvoid messageArrived(String topic, MqttMessage message)

                     throwsException {

              //subscribe后得到的消息会执行到这里面

              System.out.println("接收消息主题 : " + topic);

              System.out.println("接收消息Qos : " + message.getQos());

              System.out.println("接收消息内容 : " + new String(message.getPayload()));

       }

}

Demo架构--只演示客户端其中一个

MQTT通讯及Apollo服务器的搭建_第7张图片

服务端运行结果

MQTT通讯及Apollo服务器的搭建_第8张图片

客户端运行结果

MQTT通讯及Apollo服务器的搭建_第9张图片

说明

1.     客户端和服务端的demo代码中的userName和passWord为apollo服务器的登录账号和密码

2.     Host地址根据自己所需要的连接方式选择

  MQTT通讯及Apollo服务器的搭建_第10张图片


你可能感兴趣的:(MQTT协议之,Apache,Apollo服务,JAVA)