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

网友投稿 650 2023-01-27

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

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

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

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

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

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

org.springframework.integration

spring-integration-streamKIeKk

org.springframework.integration

spring-integration-mqtt

第二,配置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-ic=topic

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

/**

* 〈一句话功能简述〉

* 〈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-ic}")

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;

}

@Beahttp://n

@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";

}

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:混合app开发创新点(混合app开发工具)
下一篇:混合app开发成本(混合app开发成本分析)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~