Java springboot中的Mqtt集成
我尝试在Spring Boot Java项目中集成mqtt 我的部门:Java springboot中的Mqtt集成,java,mqtt,Java,Mqtt,我尝试在Spring Boot Java项目中集成mqtt 我的部门: <dependency> <groupId>org.springframework.integration</groupId> <artifactId>spring-integration-mqtt</artifactId> <scope>compile</scope> <
<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>
我在这里得到一个错误: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将获取传入消息并将其发送到记录器。如果您想以不同的方式处理,您需要更改该方法。无法找出问题所在?我确实用下面的方式解决了同样的问题。看看它是否适合你。我有一个定义如下的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将获取传入消息并将其发送到记录器。如果要以不同的方式处理,则需要更改该方法。是否可以发布完整的错误消息?因为这可能暗示了什么地方出了问题。参考:你能发布完整的错误消息吗?因为这可能暗示出问题所在。请参考: