java实现mqtt发送消息和接收消息

13 篇文章 0 订阅

简易实现

所需jar

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

发送端


public class MqttSend {

    public static void main(String[] args) {
        //MQTT协议前缀
        String urlFrontSuffix = "tcp://xx.xx.xx.xx:1883";
        String clienId = String.valueOf(System.currentTimeMillis());
        System.out.println(clienId);
        String content = "test_msg001";
        //Topic前缀
        String frontTopic = "/data/test";
        String allTopic = frontTopic+"/"+"test_topic";
        try{
            MemoryPersistence memoryPersistence = new MemoryPersistence();
            // 创建客户端
            MqttClient client = new MqttClient(urlFrontSuffix, clienId, memoryPersistence);
            //创建连接参数
            MqttConnectOptions connOpts = new MqttConnectOptions();
            // 创建连接
            client.connect(connOpts);
            // 创建消息
            MqttMessage message = new MqttMessage(content.getBytes());
            //  设置消息的服务质量
            // 0:最多一次传送 (只负责传送,发送过后就不管数据的传送情况)
			// 1:至少一次传送 (确认数据交付)
			// 2:正好一次传送 (保证数据交付成功)
            message.setQos(0);
            //  发布消息
            client.publish(allTopic, message);
            //  断开连接
            client.disconnect();
            // 关闭客户端
            client.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

接收端

public class MqttAccept {

    public static void main(String[] args) {
        //MQTT协议前缀
        String urlFrontSuffix = "tcp://xx.xx.xx.xx:1883";
        String clienId = String.valueOf(System.currentTimeMillis());
        System.out.println(clienId);
        //Topic前缀
        String frontTopic = "/data/test";
        String allTopic = frontTopic + "/" + "test_topic";
        try {
            MemoryPersistence memoryPersistence = new MemoryPersistence();
            MqttClient client = new MqttClient(urlFrontSuffix, clienId, memoryPersistence);
            MqttConnectOptions options = new MqttConnectOptions();
            // 设置客户端和服务器是否应在重新启动和重新连接期间记住状态 默认false
            options.setCleanSession(true);
            // 设置超时时间
            options.setConnectionTimeout(10);
            // 设置会话心跳时间
            options.setKeepAliveInterval(20);
            // 设置超时时间
            options.setConnectionTimeout(10);
            // 设置会话心跳时间
            options.setKeepAliveInterval(20);
            // 设置回调函数,当订阅到信息时调用此方法
            client.setCallback(new MqttCallback() {
                @Override
                public void connectionLost(Throwable throwable) {
                    // 连接失败时调用  重新连接订阅
                    try {
                        System.out.println("开始重连");
                        Thread.sleep(3000);
                        client.connect(options);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    } catch (MqttSecurityException e) {
                        e.printStackTrace();
                    } catch (MqttException e) {
                        e.printStackTrace();
                    }
                }

                @Override
                public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
                    // 订阅成功,并接受信息时调用
                    String payload = new String(mqttMessage.getPayload()); // 获取消息内容
                    System.out.println("MqttAccept_________"+ payload);
                }

                @Override
                public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
                    System.out.println("deliveryComplete");
                }
            });
            client.connect(options);
            client.subscribe(allTopic,0);
            System.out.println("连接成功");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

centos7 快速安装部署mqtt

安装部署

cd /usr/local
mkdir mqtt
cd mqtt
wget https://www.emqx.io/downloads/broker/v3.2.1/emqx-centos7-v3.2.1.zip
unzip emqx-centos7-v3.2.1.zip
cd /usr/local/mqtt/emqx
# 启动服务 到这里服务mqtt服务就启动了
./bin/emqx start
# 默认启动之后 tcp端口为1883 验证是否成功可通过查看日志查看
# 访问 http://xx.xx.xx.xx:18083/
# 用户名 :admin
# 密码 : public
# 可查看控制台信息与配置 ps: 阿里云服务器需要配置安全规则放开18083与1883端口
# 关闭服务
./bin/emqx stop
# 查看日志
./bin/emqx console

修改配置文件

cd /usr/local/mqtt/emqx/etc
vim emqx.conf
# 修改端口号 1883 
listener.tcp.external = 0.0.0.0:1883
# 修改完成后 重启mqtt即可

docker 容器部署


docker pull eclipse-mosquitto
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值