SpringBoot2.0集成MQTT消息推送功能实现

作者:大道迷途 时间:2022-02-28 01:55:04 

        这几天在弄后端管理系统向指定的Android客户端推送消息的功能模块,查阅了网上很多博客介绍的许多方式,最终选择基于MQTT协议来实现,MQTT是一个轻量级的消息发布/订阅协议,它是实现基于手机客户端的消息推送服务器的理想解决方案。

        实现MQTT协议的中间件有很多,我用的是Apollo服务器,如何搭建MQTT服务器,请查阅其他资料。这里,主要介绍SpringBoot2.0集成MQTT实现消息推送的功能。好,正式开始:

        本文采用Gateway绑定的方式,网上也有介绍但不全面,还有其他采用Paho MQTT Client库的方式实现的。

         第一,pom配置,我们需要引入相关jar:        


<dependency>
   <groupId>org.springframework.integration</groupId>
   <artifactId>spring-integration-stream</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.integration</groupId>
  <artifactId>spring-integration-mqtt</artifactId>
</dependency>

        第二,配置MQTT服务器基本信息,在springBoot配置文件application.properties中配置,添加如下:


#MQTT配置信息
#MQTT-用户名
spring.mqtt.username=admin
#MQTT-密码
spring.mqtt.password=password
#MQTT-服务器连接地址,如果有多个,用逗号隔开,如:tcp://127.0.0.1:61613,tcp://192.168.2.133:61613
spring.mqtt.url=tcp://127.0.0.1:61613
#MQTT-连接服务器默认客户端ID
spring.mqtt.client.id=mqttId
#MQTT-默认的消息推送主题,实际可在调用接口时指定
spring.mqtt.default.topic=topic

    第三,配置MQTT消息推送配置类,


/**
* 〈一句话功能简述〉<br>
* 〈MQTT发送消息配置〉
*
* @author AnswerChang
* @create 2018/6/4
* @since 1.0.0
*/
@Configuration
@IntegrationComponentScan
public class MqttSenderConfig {

@Value("${spring.mqtt.username}")
   private String username;

@Value("${spring.mqtt.password}")
   private String password;

@Value("${spring.mqtt.url}")
   private String hostUrl;

@Value("${spring.mqtt.client.id}")
   private String clientId;

@Value("${spring.mqtt.default.topic}")
   private String defaultTopic;

@Bean
   public MqttConnectOptions getMqttConnectOptions(){
       MqttConnectOptions mqttConnectOptions=new MqttConnectOptions();
       mqttConnectOptions.setUserName(username);
       mqttConnectOptions.setPassword(password.toCharArray());
       mqttConnectOptions.setServerURIs(new String[]{hostUrl});
       mqttConnectOptions.setKeepAliveInterval(2);
       return mqttConnectOptions;
   }
   @Bean
   public MqttPahoClientFactory mqttClientFactory() {
       DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();
       factory.setConnectionOptions(getMqttConnectOptions());
       return factory;
   }
   @Bean
   @ServiceActivator(inputChannel = "mqttOutboundChannel")
   public MessageHandler mqttOutbound() {
       MqttPahoMessageHandler messageHandler =  new MqttPahoMessageHandler(clientId, mqttClientFactory());
       messageHandler.setAsync(true);
       messageHandler.setDefaultTopic(defaultTopic);
       return messageHandler;
   }
   @Bean
   public MessageChannel mqttOutboundChannel() {
       return new DirectChannel();
   }
}

        第四,配置MqttGateway消息推送接口类,在sendToMqtt(String data,@Header(MqttHeaders.TOPIC)String topic)接口中,data为发送的消息内容,topic为主题。指定topic,则我们的接口可以根据需要,向不同的主题发送消息,方便灵活应用。如果不指定,则使用默认配置的主题。


@MessagingGateway(defaultRequestChannel = "mqttOutboundChannel")
public interface MqttGateway {
   void sendToMqtt(String data,@Header(MqttHeaders.TOPIC) String topic);
}

        最后,写个接口类测试下功能,用Postman调用sendMqtt.do接口,往hello主题发送消息,用MQTTLens订阅hello主题,从下面截图,可以看出可以正常往MQTT服务发送消息了,而且可以订阅到。


@RestController
@RequestMapping("/test")
public class TestController {

@Autowired
   private MqttGateway mqttGateway;

@RequestMapping("/sendMqtt.do")
   public String sendMqtt(String  sendData){
       mqttGateway.sendToMqtt(sendData,"hello");
       return "OK";
   }
}

SpringBoot2.0集成MQTT消息推送功能实现

SpringBoot2.0集成MQTT消息推送功能实现

来源:https://blog.csdn.net/qq_41018959/article/details/80592444

标签:SpringBoot,MQTT,消息推送
0
投稿

猜你喜欢

  • Spring security登录过程逻辑详解

    2022-09-04 19:58:20
  • VS2019配置opencv详细图文教程和测试代码的实现

    2023-07-17 13:49:31
  • C#一个方法返回多个值示例

    2023-06-22 18:38:49
  • C#中winform实现自动触发鼠标、键盘事件的方法

    2022-02-23 22:50:58
  • Java线程的生命周期命名与获取代码实现

    2022-05-21 05:19:49
  • 解决Springboot2.1.x配置Activiti7单独数据源问题

    2022-07-28 02:24:04
  • JavaSE-面向对象(方法重写)

    2023-01-27 10:51:09
  • Java面向对象编程(封装/继承/多态)实例解析

    2023-11-11 11:33:09
  • C#微信开发之接收 / 返回文本消息

    2021-08-21 14:37:11
  • C#反射之基础应用实例总结

    2023-08-29 04:50:56
  • lambda表达式解决java后台分组排序过程解析

    2023-11-29 06:03:39
  • java实现倒序读取文件功能示例分享

    2023-07-12 09:23:54
  • Java servlet、filter、listener、interceptor之间的区别和联系

    2023-11-02 15:32:17
  • 举例讲解Java设计模式编程中Decorator装饰者模式的运用

    2023-01-13 03:17:00
  • Android自定义View之绘制圆形头像功能

    2022-09-27 19:24:29
  • Android Button 自带阴影效果另一种解决办法

    2021-06-07 04:23:02
  • C++ 实现球迷 今日头条面试题

    2022-07-08 11:03:24
  • JVM 心得分享(加载 链接 初始化)

    2023-09-01 19:17:50
  • 使用C#编写15子游戏

    2023-03-23 08:28:52
  • Java swing实现酒店管理系统

    2021-08-08 02:24:12
  • asp之家 软件编程 m.aspxhome.com