簡體   English   中英

Spring Boot中的Mqtt集成

[英]Mqtt-Integration in Spring Boot

我嘗試將mqtt集成到我的Spring Boot Java Project中。

我的態度:

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

我創建了一個名為MqttClient的Java類。 我在這里嘗試:

IMqttClient publisher = new org.eclipse.paho.client.mqttv3.MqttClient("pfad", publisherId);

我在這里收到錯誤: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將獲取傳入的消息並將其發送到記錄器。 如果要以不同的方式處理它,則需要更改該方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM