java和mqtt的那些事(一)

来源:互联网 发布:linux启动stage 编辑:程序博客网 时间:2024/05/21 17:22

如果使用java代码和mqtt进行连接话需要引入jar包,pom.xml文件中如下所示:

<dependency>    <groupId>org.eclipse.paho</groupId>    <artifactId>org.eclipse.paho.client.mqttv3</artifactId>    <version>1.1.0</version></dependency>

在paho中发布消息和订阅主题都是通过MqttClient类来实现的:

org.eclipse.paho.client.mqttv3

Class MqttClient

  • java.lang.Object
    • org.eclipse.paho.client.mqttv3.MqttClient
  • All Implemented Interfaces:
    IMqttClient
    实例化这种类有两种方法,其实只有一种方法那就是:
    public MqttClient(String serverURI, String clientId, MqttClientPersistence persistence) throws MqttException {   aClient = new MqttAsyncClient(serverURI, clientId, persistence);}

    public MqttClient(String serverURI, String clientId) throws MqttException {   this(serverURI,clientId, new MqttDefaultFilePersistence());}
    聪明的你就会发下真的是一种方法不过第二种只是默认的创建了MqttDefaultFilePersistence这个类的实例对象,这个类对象呢又是MqttClientPersistence类的子类总之差不多。那么这个类又是干什么的呢,它是用来存储信息的,总的来说不管是客户端还是服务端发送信息的时候都需要先把信息存储起来,因为不存储起来在传递过程中可能会出现丢失和失败,而这个类就是用来存储信息使得发送信息更加可靠。
    之后对于服务端就是直接连接了。而对于客户端还需要如下操作:
    创建:MqttConnectOptions这个类对象了,为什么呢?因为这个类对象是用来保存你对连接的设置选项的,有什么用户账号和密码,是否清楚Session,是否自动连接,连接超时的时长等等。
    MqttConnectOptions options = new MqttConnectOptions();
    然后设置回掉函数类,回掉函数是主题发布消息的时候,客户端这边会使用到的类,这个类需要实现MqttCallback,然后实现三个方法
    public void connectionLost(Throwable cause)
    public void deliveryComplete(IMqttDeliveryToken token)
    public void messageArrived(String topic, MqttMessage message) throws Exception