Spring boot can';在spring集成下使用Paho接收MQTT消息

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收到关于您的代码没有什么可说的。虽然我不知道为什么您会向我们显示一个出站部件,因为您是通过命令行发送的。此外,您还没有显示到目前为止出现的症状:是否存在来自代理端应用程序的连接?我认为

}

这是我的代码。上面是我的代码,我使用ActiveMQ作为代理。当我在命令行上发送消息时,可以发送消息,但我无法接收它

这样的信息:


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;
}