/*** MQTT配置
* @Author: songyaru
* @Date: 2020/8/28 14:04
* @Version 1.0*/@Slf4j
@Configuration
@IntegrationComponentScanpublic classMqttReceiveConfig {
@Value("${spring.mqtt.username}")privateString username;
@Value("${spring.mqtt.password}")privateString password;
@Value("${spring.mqtt.url}")privateString hostUrl;
@Value("${spring.mqtt.client.id}")privateString clientId;
@Value("${spring.mqtt.default.topic}")privateString defaultTopic;
@Value("${spring.mqtt.default.completionTimeout}")private int completionTimeout;//连接超时//初始化连接
@BeanpublicMqttConnectOptions getMqttConnectOptions() {
MqttConnectOptions mqttConnectOptions= newMqttConnectOptions();
mqttConnectOptions.setUserName(username);
mqttConnectOptions.setPassword(password.toCharArray());
mqttConnectOptions.setServerURIs(newString[]{hostUrl});
mqttConnectOptions.setKeepAliveInterval(50);returnmqttConnectOptions;
}//初始化mqtt工厂
@BeanpublicMqttPahoClientFactory mqttClientFactory() {
DefaultMqttPahoClientFactory factory= newDefaultMqttPahoClientFactory();
factory.setConnectionOptions(getMqttConnectOptions());returnfactory;
}//接收通道
@Primary
@Bean("mqttInputChannel")publicMessageChannel mqttInputChannel() {return newDirectChannel();
}//配置client,监听的topic
@Beanpublic MessageProducer inbound(@Qualifier("mqttInputChannel") MessageChannel messageChannel) {
MqttPahoMessageDrivenChannelAdapter adapter=
new MqttPahoMessageDrivenChannelAdapter(clientId + "_inbound", mqttClientFactory(),defaultTopic);
adapter.setCompletionTimeout(completionTimeout);
adapter.setConverter(newDefaultPahoMessageConverter());
adapter.setQos(1);
adapter.setOutputChannel(messageChannel);returnadapter;
}//订阅消费数据,通过通道获取数据
@Bean
@ServiceActivator(inputChannel= "mqttInputChannel")publicMessageHandler handler() {return newMessageHandler() {
@Overridepublic void handleMessage(Message> message) throwsMessagingException {
log.info("主题:{},消息接收到的数据:{}", message.getHeaders().get("mqtt_receivedTopic"), message.getPayload());
}
};
}
}