Java调用MQTT入门

服务器: 

搭建本地mqtt服务器:基于Mosquitto搭建MQTT服务器_月亮鞋业的博客-CSDN博客


也可以使用公共服务器:
        官网地址:http://www.ranye-iot.net
        MQTT服务器地址:test.ranye-iot.net
        TCP 端口:1883
        TCP/TLS 端口:8883


Java引用:

先引入依赖

<!--MQTT依赖-->
<dependency>
      <groupId>org.eclipse.paho</groupId>
      <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
      <version>1.2.0</version>
</dependency>


发布消息

调用这个sendMsg()方法就能向test.ranye-iot.net地址发送主题为testtopic的消息了;

    public static void sendMsg() throws MqttException {
        String clientId = "JavaSample1"; //客户ID,自己起名,不可重复
        String content  = "主题内容xxxxxxxxxxx"; //发送的信息
        String topic   = "testtopic";    //主题
        int qos         = 2;    //服务质量等级
        String broker  = "tcp://test.ranye-iot.net:1883";  //服务器地址

        MqttClient client = new MqttClient(broker, clientId, new MemoryPersistence());//创建客户累
        MqttConnectOptions connect = new MqttConnectOptions();//创建连接类
        connect.setConnectionTimeout(60);//超时时间
        connect.setKeepAliveInterval(10);//心跳时间
        connect.setCleanSession(true);//清除会话
        client.connect(connect);//客户类通过连接类连接
        MqttMessage message = new MqttMessage(content.getBytes());//发布消息类
        message.setQos(qos);//发布消息类设置服务质量等级
        client.publish(topic, message);//发布消息
//        client.disconnect();//客户类关闭连接
//        System.exit(0);//退出
    }

接收消息

1、先写回调函数类,实现MqttCallback接口;

        重写三个方法,第一个connectionLost是链接丢失时触发,第二个messageArrived是接收到消息触发,第三个deliveryComplete是消息发布完成触发;

public class MyCallBack implements MqttCallback {
    //连接丢失时触发(不包括主动disconnect)
    @Override
    public void connectionLost(Throwable throwable) {
        System.out.println("连接失败,请重新连接");
    }
    //接收到内容触发
    @Override
    public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
        System.out.println("接收到的主题为:" + s);
        System.out.println("内容为:" + new String(mqttMessage.getPayload(), StandardCharsets.UTF_8));
    }
    //发布完消息触发
    @Override
    public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
        System.out.println("发布消息成功");
    }
}

2、建立连接开启监听,当调用发送消息方法时就能接收到了;

    public static void getMsg() throws MqttException {
        String clientId = "JavaSample2"; //客户ID,不可重复
        String topic   = "testtopic";    //主题
        int qos         = 2;    //服务质量等级
        String broker  = "tcp://test.ranye-iot.net:1883";  //服务器地址

        MqttClient client = new MqttClient(broker, clientId, new MemoryPersistence());//创建客户累
        client.setCallback(new MyCallBack());
        MqttConnectOptions connect = new MqttConnectOptions();//创建连接类
        connect.setConnectionTimeout(60);//超时时间
        connect.setKeepAliveInterval(10);//心跳时间
        connect.setCleanSession(true);//清除会话
        client.connect(connect);//客户类通过连接类连接
        client.subscribe(topic, qos);// qos:服务质量等级
    }

测试

        先调用接收消息getMsg(),然后调用发布消息sendMsg();

    public static void main(String[] args) {
        try {
            getMsg();
            sendMsg();
        } catch (MqttException e) {
            e.printStackTrace();
        }
    }

        可以看到控制台打印回调函数里的内容;

 

MQTT.fx测试  

       也可以用MQTT.fx软件来测试,如下:

 

         点击Publish后,在刚才的控制台就能看到了

         接收的时候

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值