[英]Mqtt-Integration in Spring Boot
我嘗試將mqtt集成到我的Spring Boot Java Project中。
我的態度:
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-mqtt</artifactId>
<scope>compile</scope>
<exclusions>
<exclusion>
<artifactId>jackson-module-kotlin</artifactId>
<groupId>com.fasterxml.jackson.module</groupId>
</exclusion>
</exclusions>
</dependency>
我創建了一個名為MqttClient的Java類。 我在這里嘗試:
IMqttClient publisher = new org.eclipse.paho.client.mqttv3.MqttClient("pfad", publisherId);
我在這里收到錯誤:org.eclipse.paho.client.mqttv3.MqttClient
錯誤:未處理的異常:org.eclipse.paho.client.mqttv3.MqttException
知道怎么了嗎?
無法找出問題所在? 我確實按照以下方式解決了相同的問題。 看看是否適合您。 我有一個如下定義的mqtt網關類。
import org.springframework.integration.annotation.MessagingGateway;
@MessagingGateway(defaultRequestChannel = "mqttPromiseOutboundChannel")
public interface MqttPromiseGateway {
void sendToMqtt(String data);
}
當我想向Mqtt發送消息時,我會自動連接定義的網關類。
@Autowired
private MqttPromiseGateway mqttPromiseGateway;
現在,我可以使用該網關通過該Mqtt通道發送消息。
mqttPromiseGateway.sendToMqtt(content);
我們還為MqttProducer定義了服務。
@Service
public class DemoMqttProducer {
@Bean
public MqttPahoClientFactory mqttClientFactory() {
DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();
MqttConnectOptions options = new MqttConnectOptions();
options.setServerURIs(new String[] { "tcp://localhost:1883" });
options.setUserName("myusername");
options.setPassword("mypassword#".toCharArray());
factory.setConnectionOptions(options);
return factory;
}
@Bean
@ServiceActivator(inputChannel = "mqttPromiseOutboundChannel")
public MessageHandler mqttPromiseOutbound() {
MqttPahoMessageHandler messageHandler =
new MqttPahoMessageHandler("testClient", mqttClientFactory());
messageHandler.setAsync(true);
messageHandler.setDefaultTopic("Promise");
return messageHandler;
}
@Bean
public MessageChannel mqttOutboundChannel() {
return new DirectChannel();
}
@Bean
public MessageChannel mqttPromiseOutboundChannel() {
return new DirectChannel();
}
@Bean
public IntegrationFlow mqttInFlow() {
return IntegrationFlows.from(mqttInbound())
.transform(p -> p + ", received from MQTT")
.handle(logger())
.get();
}
@Bean
public MessageProducerSupport mqttInbound() {
MqttPahoMessageDrivenChannelAdapter adapter = new MqttPahoMessageDrivenChannelAdapter("siSampleConsumer",
mqttClientFactory(), "Promise");
adapter.setCompletionTimeout(5000);
adapter.setConverter(new DefaultPahoMessageConverter());
adapter.setQos(1);
return adapter;
}
}
方法mqttInflow將獲取傳入的消息並將其發送到記錄器。 如果要以不同的方式處理它,則需要更改該方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.