Search code examples
spring-integrationspring-integration-mqtt

Sending messages to different topics using spring integration gateway


I am trying to use spring integration for send mqtt messages to a broker and I am trying to use the gateway interface.

 @Bean
public MqttPahoClientFactory mqttClientFactory() {
    DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();
    //set the factory details
    return factory:
}

@Bean
@ServiceActivator(inputChannel = "mqttOutboundChannel")
public MessageHandler mqttOutbound() {
    MqttPahoMessageHandler messageHandler =
            new MqttPahoMessageHandler("randomString", mqttClientFactory());
    //set handler details
    messageHandler.setDefaultTopic(topic);
    return messageHandler;
}

@Bean
public MessageChannel mqttOutboundChannel() {
    return new DirectChannel();
}
@MessagingGateway(defaultRequestChannel = "mqttOutboundChannel")
private interface MyGateway {
    void sendToMqtt(String data);
}

My question is: If I want to use the gateway handler to send messages to different topics how would I do that without having to create an adapter for each topic ?

Thanks.

Hope I formulated my question clearly and the code is properly formatted.


Solution

  • You need to set the target topic in a message header.

    Here is one way to do that...

    void sendToMqtt(String data, @Header(MqttHeaders.TOPIC) String topic);
    

    The gateway proxy will assemble the message with the header, which is then used by the outbound adapter.