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

2025-05-29 0 26

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

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

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

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

?

1

2

3

4

5

6

7

8
<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中配置,添加如下:

?

1

2

3

4

5

6

7

8

9

10

11
#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消息推送配置类,

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55
/**

* 〈一句话功能简述〉<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,则我们的接口可以根据需要,向不同的主题发送消息,方便灵活应用。如果不指定,则使用默认配置的主题。

?

1

2

3

4
@MessagingGateway(defaultRequestChannel = "mqttOutboundChannel")

public interface MqttGateway {

void sendToMqtt(String data,@Header(MqttHeaders.TOPIC) String topic);

}

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13
@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消息推送功能实现

到此这篇关于SpringBoot2.0集成MQTT消息推送功能实现的文章就介绍到这了,更多相关SpringBoot MQTT消息推送内容请搜索快网idc以前的文章或继续浏览下面的相关文章希望大家以后多多支持快网idc!

原文链接:https://blog.csdn.net/qq_41018959/article/details/80592444

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 SpringBoot2.0集成MQTT消息推送功能实现 https://www.kuaiidc.com/105309.html

相关文章

发表评论
暂无评论