欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解決spring-integration-mqtt頻繁報(bào)Lost connection錯(cuò)誤問題

 更新時(shí)間:2023年03月11日 11:00:22   作者:VictorBu  
這篇文章主要介紹了解決spring-integration-mqtt頻繁報(bào)Lost connection錯(cuò)誤問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

問題描述

在之前的博客介紹了如何在 Spring Boot 集成 MQTT,后面使用中沒有發(fā)現(xiàn)問題,最近發(fā)現(xiàn)一直報(bào)錯(cuò):

Lost connection: Connection lost; retrying...
Lost connection: 已斷開連接; retrying...

解決過程

網(wǎng)上說是因?yàn)?client ID 重復(fù),最開始是不相信的,因?yàn)槲覝y(cè)試只啟動(dòng)了一個(gè)客戶端。但是卻怎么都定位不到異常原因,用重新回到 client ID 重復(fù)的這個(gè)思路上來:

因?yàn)槌绦蚶锿瑫r(shí)作為訂閱者和發(fā)布者,就懷疑訂閱和發(fā)布服務(wù)是不是單獨(dú)建立的連接,抱著試試看的想法試了一下,結(jié)果果然是這個(gè)原因

原代碼:

    /* 發(fā)布者 */
    @Bean
    @ServiceActivator(inputChannel = OUTBOUND_CHANNEL)
    public MessageHandler getMqttProducer() {
        MqttPahoMessageHandler messageHandler = new MqttPahoMessageHandler(clientId, getMqttClientFactory());
        messageHandler.setAsync(true);
        messageHandler.setDefaultTopic(defaultTopic);
        messageHandler.setDefaultRetained(defaultRetained);
        messageHandler.setDefaultQos(defaultProducerQos);

        return messageHandler;
    }

    /* 訂閱者 */
    @Bean
    public MessageProducer getMqttConsumer() {
        MqttPahoMessageDrivenChannelAdapter adapter =
                new MqttPahoMessageDrivenChannelAdapter(clientId, getMqttClientFactory(), consumerTopics);
        adapter.setCompletionTimeout(completionTimeout);
        adapter.setConverter(new DefaultPahoMessageConverter());
        adapter.setQos(defaultConsumerQos);
        adapter.setOutputChannel(inboundChannel());

        return adapter;
    }

訂閱者和發(fā)布者使用的是相同的 client ID,修改后代碼:

    /* 發(fā)布者 */
    @Bean
    @ServiceActivator(inputChannel = OUTBOUND_CHANNEL)
    public MessageHandler getMqttProducer() {
        MqttPahoMessageHandler messageHandler = new MqttPahoMessageHandler(clientId + "_producer", getMqttClientFactory());
        messageHandler.setAsync(true);
        messageHandler.setDefaultTopic(defaultTopic);
        messageHandler.setDefaultRetained(defaultRetained);
        messageHandler.setDefaultQos(defaultProducerQos);

        return messageHandler;
    }

    /* 訂閱者 */
    @Bean
    public MessageProducer getMqttConsumer() {
        MqttPahoMessageDrivenChannelAdapter adapter =
                new MqttPahoMessageDrivenChannelAdapter(clientId + "_consumer", getMqttClientFactory(), consumerTopics);
        adapter.setCompletionTimeout(completionTimeout);
        adapter.setConverter(new DefaultPahoMessageConverter());
        adapter.setQos(defaultConsumerQos);
        adapter.setOutputChannel(inboundChannel());

        return adapter;
    }

總結(jié)

雖然目前解決了這個(gè)問題,但是為什么會(huì)單獨(dú)建立兩個(gè)連接的原因還未找到;另外,一個(gè)程序兩個(gè)連接還是感覺怪怪的,不知道還有沒有更優(yōu)的處理方案。

希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論