SpringBoot+MQTT(方案二)
创始人
2025-06-01 00:43:25
0
  1. Linux安装EMQX
  2. pom.xml
    
    org.springframework.integrationspring-integration-mqtt6.0.3
    
  3. application.yml
    server:port: 8686servlet:context-path: /mqttspring:application:name: mqttmqtt:url: tcp://192.168.1.97:1883username: adminpassword: publicclient:id: mqtt-client-id
  4. MQTT配置
    @Configuration
    public class MqttConfig {@Value("${spring.mqtt.url}")private String url;@Value("${spring.mqtt.username}")private String username;@Value("${spring.mqtt.password}")private String password;@Value("${spring.mqtt.client.id}")private String clientId;@Autowiredprivate MqttReceiver mqttReceiver;@Beanpublic MessageChannel mqttInputChannel() {return new DirectChannel();}@Beanpublic MessageProducer inbound() { // 订阅主题MqttPahoMessageDrivenChannelAdapter adapter =new MqttPahoMessageDrivenChannelAdapter(url, clientId+"-"+System.currentTimeMillis(),"AAA/#", "BBB/#", "CCC/#");adapter.setCompletionTimeout(5000);adapter.setConverter(new DefaultPahoMessageConverter());adapter.setQos(1);adapter.setOutputChannel(mqttInputChannel());return adapter;}@Bean@ServiceActivator(inputChannel = "mqttInputChannel")public MessageHandler handler() {return mqttReceiver;}@Beanpublic MqttPahoClientFactory mqttClientFactory(){DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();MqttConnectOptions options = new MqttConnectOptions();options.setServerURIs(new String[] { url });options.setUserName(username);options.setPassword(password.toCharArray());options.setCleanSession(true);options.setAutomaticReconnect(true);factory.setConnectionOptions(options);return factory;}@Bean@ServiceActivator(inputChannel = "mqttOutboundChannel")public MessageHandler mqttOutbound() {MqttPahoMessageHandler messageHandler =new MqttPahoMessageHandler(clientId+"-"+System.currentTimeMillis(), mqttClientFactory());messageHandler.setAsync(true);messageHandler.setDefaultTopic("DefaultTopic");return messageHandler;}@Beanpublic MessageChannel mqttOutboundChannel() {return new DirectChannel();}@MessagingGateway(defaultRequestChannel = "mqttOutboundChannel")public interface MqttGateway {void sendToMqtt(@Header(MqttHeaders.TOPIC) String topic, String payload);void sendToMqtt(@Header(MqttHeaders.TOPIC) String topic, @Header(MqttHeaders.QOS) int qos, String payload);void sendToMqtt(@Header(MqttHeaders.TOPIC) String topic, @Header(MqttHeaders.QOS) int qos, byte[] payload);}}
  5. 消息处理器

    @Component
    public class MqttReceiver implements MessageHandler {@AutowiredMqttSender mqttSender;@Overridepublic void handleMessage(Message message) {MessageHeaders headers = message.getHeaders();String topic = (String) headers.get(MqttHeaders.RECEIVED_TOPIC);String payload = (String) message.getPayload();if (topic.indexOf("AAA")!=-1) {System.out.println("============================AAA");mqttSender.send("BBB", "BBB测试消息");} else if (topic.indexOf("BBB")!=-1) {System.out.println("============================BBB");mqttSender.send("CCC", "CCC测试消息");} else if (topic.indexOf("CCC")!=-1) {System.out.println("============================CCC");}}}
  6. 消息发布器
    @Component
    public class MqttSender {@AutowiredMqttConfig.MqttGateway mqttGateway;/*** 发送mqtt消息* @param topic 主题* @param message 内容* @return void*/public void send(String topic, String message) {mqttGateway.sendToMqtt(topic, message);}/*** 发送包含qos的消息* @param topic 主题* @param qos 质量* 0 表示的是订阅者没收到消息不会再次发送,消息会丢失* 1 表示的是会尝试重试,一直到接收到消息,但这种情况可能导致订阅者收到多次重复消息* 2 多了一次去重的动作,确保订阅者收到的消息有一次* @param messageBody 消息体*/public void send(String topic, int qos, JSONObject messageBody){mqttGateway.sendToMqtt(topic, qos, messageBody.toString());}/*** 发送包含qos的消息* @param topic 主题* @param qos 质量* 0 表示的是订阅者没收到消息不会再次发送,消息会丢失* 1 表示的是会尝试重试,一直到接收到消息,但这种情况可能导致订阅者收到多次重复消息* 2 多了一次去重的动作,确保订阅者收到的消息有一次* @param message 消息体*/public void send(String topic, int qos, byte[] message){mqttGateway.sendToMqtt(topic, qos, message);}}
  7. MQTT接口
    @RestController
    public class MqttController {@AutowiredMqttSender mqttSender;@RequestMapping("/sendMessage")public void sendMessage(String topic, String message) throws MqttException {mqttSender.send(topic, message);}}
  8. MQTT测试

  9. 参考文档
    MQTT Support

相关内容

热门资讯

银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...