无法接收已发布的消息以在 mqtt paho 上订阅主题

2023-12-20

我正在使用 paho 发送和接收 mqtt 消息。到目前为止,发送消息没有任何问题。我在接收它们时遇到问题。我的代码是:

     package BenchMQTT;

     import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
     import org.eclipse.paho.client.mqttv3.IMqttToken;
     import org.eclipse.paho.client.mqttv3.MqttCallback;
     import org.eclipse.paho.client.mqttv3.MqttException;
     import org.eclipse.paho.client.mqttv3.MqttMessage;
     import org.eclipse.paho.client.mqttv3.MqttClient;

     public class Test_A_2 implements MqttCallback {

     MqttClient clientR;
     MqttClient clientS;

     public Test_A_2() {
     }

     public static void main(String[] args) throws InterruptedException {
         long startTime = System.currentTimeMillis();
         new Test_A_2().doDemo();
         long endTime = System.currentTimeMillis();
     }

    public void doDemo() throws InterruptedException {
    try {   
    clientS = new MqttClient("tcp://mybroker:1883", "Sender");
    clientR = new MqttClient("tcp://mybroker:1883", "Reiever");
    clientR.connect();
    clientS.connect();
    MqttMessage message = new MqttMessage();

    String messagePayload = "qwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjk"
            + "lzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghj"
            + "klzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfgh"
            + "jklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfg"
            + "hjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasd"
            + "fghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopas"
            + "dfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopa"
            + "sdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiop"
            + "asdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuio"
            + "pasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyui"
            + "opasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyu"
            + "iopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwerty"
            + "uiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwert"
            + "nmqwertyuiop";

    clientR.subscribe("BenchMQTT");   
    clientR.setCallback(this);

    for(int i=0;i<10;i++)
    {
    message.setPayload((messagePayload)
            .getBytes());
    System.out.println(i);
    clientS.publish("BenchMQTT", message);
    }
    clientR.disconnect();   
    clientS.disconnect();
    clientR.close();   
    clientS.close();

   } catch (MqttException e)
    {
     System.out.println("ERROR");
    }
 }

     @Override
     public void connectionLost(Throwable cause) {
         // TODO Auto-generated method stub

     }

     @Override
     public void messageArrived(String topic, MqttMessage message)
     {
         System.out.println("Received: " + message.toString());
     }

     @Override
     public void deliveryComplete(IMqttDeliveryToken token) {

     }

     }

这发送和接收消息。

OUTPUT:

0
Received: 0
1
Received: 1
2
Received: 2
3
Received: 3
4
Received: 4
5
Received: 5
6
Received: 6
7
Received: 7
8
Received: 8
9
Received: 9

我想发送消息,然后接收它们。有什么帮助吗? 预期输出:

0
1
2
3
4
5
6
7
8
9
Received: 0
Received: 1
Received: 2
Received: 3
Received: 4
Received: 5
Received: 6
Received: 7
Received: 8
Received: 9

这不是 MQTT(或任何发布/订阅消息传递)的工作原理,如果接收者连接到服务器,则消息将在发送时传递。

例外情况是,如果接收方连接并订阅了 QOS 大于 0 的主题,然后断开连接并稍后重新连接(没有设置干净会话标志),则将传递已发布的 QOS 大于 0 的丢失消息在重新连接时。

另一种可能性是,如果消息已在保留标志设置为 true 的情况下发布,但只有发布到主题的最后一条消息才会在接收客户端订阅时传递。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法接收已发布的消息以在 mqtt paho 上订阅主题 的相关文章

随机推荐

  • JPQL 中的 timestampdiff 等效项(不使用条件)

    我想在 JPQL 中使用以下 mysql 函数 TIMESTAMPDIFF YEAR some start date CURDATE 另外 我不必在 JPA 中使用 Criteria 因为我们正在遵循编写命名查询 JPQL 的实践 那么 这
  • Android studio 始终使用 JDK 7,不要切换到 JDK 8

    我遇到了一些有趣的问题 当我尝试通过单击来更改 JDK 时文件 gt 项目结构 gt SDK 位置 我将其更改为我的新版本 然后我点击OK然后再次打开此页面 它向我显示了以下内容 为什么不想换JDK 甚至我的 PATH 设置为 JDK 8
  • MFCC 的含义

    我有一个概念问题 我知道什么是梅尔标度以及它代表什么 而且我知道这种频谱图仍然包含太多我需要的信息 我认为如果我们想减少频谱图的信息数量 我们可以使用 MFCC 但我实在不明白MFCC是什么以及它代表什么 我在语音识别过程中使用 MFCC
  • 如何在保留子目录的同时拆分 git 存储库?

    我想要的是类似于这个问题 https stackoverflow com questions 359424 detach subdirectory into separate git repository 但是 我希望拆分为单独存储库的目录
  • F# ionide webshaperserverclient - 如何运行

    我跑步时遇到问题websharperserverclient来自 ionide 项目生成器的模板应用程序 并且在网上找不到任何如何操作的信息 我得到的最接近的东西是这个问题 https stackoverflow com questions
  • 纯JSP页面导航最佳实践?

    在我的 Web 应用程序的各个 JSP 页面之间实现导航链接的最佳方法是什么 假设我有一个list jsp显示项目列表 然后 用户单击其中一项以查看该项目的更多详细信息view jsp 现在我需要一个链接view jsp回到list jsp
  • 我可以使用模型绑定验证 HTTP 请求签名令牌和随机数吗?

    我正在使用 ASP NET MVC 设置一个端点 可以向该端点发出操作和检索数据的请求 基本上是一个 API 我使用 2 legged OAuth 模型来验证请求是否使用密钥和签名方法以及随机数表进行签名 以防止劫持 由于模型绑定在 ASP
  • PHP flock() - 幕后是什么?

    在与 PHP 源码搏斗了半个小时后 我放弃了 P 问题是 在 Gentoo Linux 系统上 PHP freeze 函数调用归结为什么系统调用 我遇到了一些问题 比如每 20 次循环迭代中阻塞 30 秒类问题 我想知道为什么会这样 exa
  • 为什么我在 vue js 中收到“无法读取未定义的属性‘状态’”错误

    我的 store index js 是 import Vue from vue import Vuex from vuex Vue use Vuex export default new Vuex Store state name Alic
  • 反应挂钩。定期运行 useEffect

    我需要定期获取数据并将其更新到屏幕上 我有这个代码 const temperature setTemperature useState useEffect gt fetch urlToWeatherData then function re
  • 从 Excel 中包含逗号分隔值的两个单元格中提取公共值

    有没有一种简单的方法可以从两个以逗号分隔的数字单元格中提取共同的数字 我有单元格 每个单元格中有 12 个逗号分隔的数字 它们并不都是唯一的 有些数字可以重复两次 但不能超过两次 数字都是正数 并且只能是一位或两位数字 我的数据是这样的 它
  • 解析“DateTime.Now”?

    我需要翻译这样的字符串 DateTime Now AddDays 7 转化为它们的等价表达式 我只对 DateTime 类感兴趣 Net 中是否有内置的东西可以帮助我做到这一点 或者我只需要编写自己的小解析器 您可以雇用FLEE http
  • 通知点击事件时的通话活动

    我想在用户下拉通知并点击该通知时调用该活动 我怎样才能做到这一点 Call setLatestEventInfo on the Notification对象 提供一个PendingIntent当他们点击通知抽屉中的您的条目时 就会开始您的活
  • Cypress:使用 cy.intercept() 检查是否尚未进行调用?

    使用 cy intercept 拦截 和存根 几个网络请求 到谷歌标签管理器 但希望在我的测试中尽早进行测试 然后再期望它们被调用 我将如何测试我正在拦截的两条路线haven t被叫了吗 Thanks 您可以利用cy spy命令 cy in
  • 如何在 django admin 中显示布尔属性

    众所周知 显示method在 Django 管理中将值返回为布尔值可以通过设置轻松完成boolean属性 class MyModel models Model def is something self if self something
  • Visual Studio 2022 挂起并显示“正在打开文件...”消息

    当我尝试打开 dbml 文件时 Visual Studio 2022 挂起并显示 正在打开文件 消息 当我打开任何其他文件时不会发生这种情况 我尝试通过以下方式解决这个问题 卸载Devexpress 卸载Visual Studio 2022
  • 通过过滤将消息从 Amazon SNS 路由到 SQS

    在 RabbitMQ 中 可以创建一个交换器 然后将其绑定到多个队列 每个队列都有一个路由键 这使得消息传递架构如下所示 message x foo msg q bar msg q msg logger q 客户端发布消息到message
  • 意外的关键字参数“缓冲” - python 客户端

    我收到错误 getresponse 收到意外的关键字参数 缓冲 完整的错误日志是 INFO Kivy v1 8 0 INFO Logger Record log in C Users Sudheer kivy logs kivy 14 08
  • MySQL select DATETIME 类似到分钟

    我必须比较两个表之间相对于同一时间的结果 但时间戳因记录方式而有所不同 我想获得像这样的结果实施例1但我只得到带星号的值 如实施例2 从比较中删除秒或选择与最接近的 DATETIME 值相对应的值的最佳方法是什么 目前我正在使用这个查询 S
  • 无法接收已发布的消息以在 mqtt paho 上订阅主题

    我正在使用 paho 发送和接收 mqtt 消息 到目前为止 发送消息没有任何问题 我在接收它们时遇到问题 我的代码是 package BenchMQTT import org eclipse paho client mqttv3 IMqt