Spring boot can';在spring集成下使用Paho接收MQTT消息
} 这是我的代码。上面是我的代码,我使用ActiveMQ作为代理。当我在命令行上发送消息时,可以发送消息,但我无法接收它 这样的信息:Spring boot can';在spring集成下使用Paho接收MQTT消息,spring-boot,spring-integration,activemq,paho,Spring Boot,Spring Integration,Activemq,Paho,} 这是我的代码。上面是我的代码,我使用ActiveMQ作为代理。当我在命令行上发送消息时,可以发送消息,但我无法接收它 这样的信息: 2018-08-06 11:18:02.107信息2508---[iSampleConsumer]siSample:hello stackoverflow发送到MQTT,从MQTT收到关于您的代码没有什么可说的。虽然我不知道为什么您会向我们显示一个出站部件,因为您是通过命令行发送的。此外,您还没有显示到目前为止出现的症状:是否存在来自代理端应用程序的连接?我认为
2018-08-06 11:18:02.107信息2508---[iSampleConsumer]siSample:hello stackoverflow发送到MQTT,从MQTT收到关于您的代码没有什么可说的。虽然我不知道为什么您会向我们显示一个
出站
部件,因为您是通过命令行发送的。此外,您还没有显示到目前为止出现的症状:是否存在来自代理端应用程序的连接?我认为,当您的应用程序启动并连接到代理时,应该会有一些关于此问题的日志。可能是由于错误的转换等原因导致了一些错误……看起来它基于MQTT示例应用程序,该应用程序运行良好(我刚刚再次测试了它)。我建议您比较应用程序和未修改的示例之间的调试日志。从您的日志中,我看到您收到了消息。根据您的代码“从MQTT收到”-该子字符串添加到您的使用者中。您可以发布和收听同一主题。我测试了你的样品,效果很好。
@Configuration
@SpringBootApplication
public class WyymqttApplication {
@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.topic}")
private String defaultTopic;
private static final Log LOGGER = LogFactory.getLog(WyymqttApplication.class);
public static void main(final String... args) {
SpringApplication.run(WyymqttApplication.class, args);
}
@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;
}
//publisher
@Bean
public IntegrationFlow mqttOutFlow() {
return IntegrationFlows.from(CharacterStreamReadingMessageSource.stdin(),
e -> e.poller(Pollers.fixedDelay(1000)))
.transform(p -> p + " sent to MQTT")
.handle(mqttOutbound())
.get();
}
@Bean
@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();
}
@MessagingGateway(defaultRequestChannel = "mqttOutboundChannel")
public interface MqttGateway {
void sendToMqtt(String data, @Header(MqttHeaders.TOPIC) String topic);
}
// consumer
@Bean
public IntegrationFlow mqttInFlow() {
return IntegrationFlows.from(mqttInbound())
.transform(p -> p + ", received from MQTT")
.handle(logger())
.get();
}
private LoggingHandler logger() {
LoggingHandler loggingHandler = new LoggingHandler("INFO");
loggingHandler.setLoggerName("siSample");
return loggingHandler;
}
@Bean
public MessageProducerSupport mqttInbound() {
MqttPahoMessageDrivenChannelAdapter adapter = new MqttPahoMessageDrivenChannelAdapter("siSampleConsumer",
mqttClientFactory(), defaultTopic);
adapter.setCompletionTimeout(5000);
adapter.setConverter(new DefaultPahoMessageConverter());
adapter.setQos(1);
return adapter;
}