# Emqtt-Springbot
**Repository Path**: henryzhang/Emqtt-Springbot
## Basic Information
- **Project Name**: Emqtt-Springbot
- **Description**: SpringBoot使用Emqtt进行推送消息。
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2020-03-13
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Emqtt-Springbot
使用Emqtt进行mqtt协议的传输发布消息。通过订阅对应的topic进行推送内容。
# 第三方
* [Emqtt](http://www.emqtt.com/)
* maven依赖
```
org.springframework.boot
spring-boot-starter-integration
org.springframework.integration
spring-integration-stream
org.springframework.integration
spring-integration-mqtt
```
* lombok
# 配置和代码介绍
* 进行配置相关的Mqtt的配置项
```$xslt
spring:
mqtt:
username: admin
password: public
host-url: tcp://localhost:1883
client-id: mqttId
default-topic: topic
```
**MqttProperties.java**进行配置对应的属性内容
```java
@Getter
@Setter
@ConfigurationProperties("spring.mqtt")
@Component
public class MqttProperties {
private String username;
private String password;
private String hostUrl;
private String clientId;
private String defaultTopic;
}
```
* 进行配置Mqtt的配置内容
```java
@Configuration
public class MqttConfiguration {
@Autowired
private MqttProperties mqttProperties;
@Bean
public MqttConnectOptions getMqttConnectOptions(){
MqttConnectOptions mqttConnectOptions=new MqttConnectOptions();
mqttConnectOptions.setUserName(mqttProperties.getUsername());
mqttConnectOptions.setPassword(mqttProperties.getPassword().toCharArray());
mqttConnectOptions.setServerURIs(new String[]{mqttProperties.getHostUrl()});
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(mqttProperties.getClientId(), mqttClientFactory());
messageHandler.setAsync(true);
messageHandler.setDefaultTopic(mqttProperties.getDefaultTopic());
return messageHandler;
}
@Bean
public MessageChannel mqttOutboundChannel() {
return new DirectChannel();
}
}
```
* 对应的推送
这里可以根据你想要发送给订阅者对应的内容,随意替换类型。
```java
@MessagingGateway(defaultRequestChannel = "mqttOutboundChannel")
public interface MqttTestServer {
void sendToMqtt(String data, @Header(MqttHeaders.TOPIC)String topic);
}
```
* 进行通过Controller进行发送
```java
@RestController
@RequestMapping("/test")
public class TestController {
@Autowired
private MqttTestServer mqttTestServer;
@GetMapping("/sendMq")
public String sendMqtt(String sendData){
mqttTestServer.sendToMqtt(sendData, "hello");
return "send success";
}
}
```
* 当我们项目运行起来后如图所示(图1.1)

图1.1
* 进行模拟订阅和发送。这里使用了Chrom 的`MQTTlens` 进行测试mqtt协议的传输。

可以看到 正常的收到了,订阅的信息。