Spring integration Spring Mqtt集成:出站主题问题

Spring integration Spring Mqtt集成:出站主题问题,spring-integration,mqtt,mosquitto,Spring Integration,Mqtt,Mosquitto,嗨,我正在尝试使用spring集成来接收MQTT消息,处理它们并发布到另一个主题 以下是integration.xml文件: <int-mqtt:outbound-channel-adapter id="mqtt-publish" client-id="spring-foo-1" client-factory="clientFactory" auto-startup="true" url="tcp://localhost:1883" defau

嗨,我正在尝试使用spring集成来接收MQTT消息,处理它们并发布到另一个主题

以下是integration.xml文件:

   <int-mqtt:outbound-channel-adapter id="mqtt-publish"
    client-id="spring-foo-1"
    client-factory="clientFactory"
    auto-startup="true"
    url="tcp://localhost:1883"
    default-qos="0"
    default-retained="true"
    default-topic="tweets/akki" />

   <int-mqtt:message-driven-channel-adapter id="oneTopicAdapter"
    client-id="spring-foo-2"
    client-factory="clientFactory"
    auto-startup="true"
    url="tcp://localhost:1883"
    topics="mqtt/publish"
    />

    <int:service-activator input-channel="oneTopicAdapter" method="logMessages" ref="mqttLogger" output-channel="mqtt-publish"></int:service-activator>

    <bean id="mqttLogger" class="hello.mqttReceiver" />
以下是我面临的问题:

  • 处理的_数据
    路由到mqtt/publish,而不是mqtt/akki
  • 处理的_数据
    不是发布的,而是多次发布的

这是正确的,因为
AbstractMqttMessageHandler
首先查看
头文件

String topic = (String) message.getHeaders().get(MqttHeaders.TOPIC);
    Object mqttMessage = this.converter.fromMessage(message, Object.class);
    if (topic == null && this.defaultTopic == null) {
        throw new MessageHandlingException(message,
                "No '" + MqttHeaders.TOPIC + "' header and no default topic defined");
    }
DefaultPahoMessageConverter
在消息到达时从
MqttPahoMessageDrivenChannelAdapter
填充
MqttHeaders.TOPIC
头时


在将消息发送到

之前,您应该考虑使用
,也可以使用标题充实器替换主题标题(将overwrite设置为true)。
String topic = (String) message.getHeaders().get(MqttHeaders.TOPIC);
    Object mqttMessage = this.converter.fromMessage(message, Object.class);
    if (topic == null && this.defaultTopic == null) {
        throw new MessageHandlingException(message,
                "No '" + MqttHeaders.TOPIC + "' header and no default topic defined");
    }