开发者社区 > 云原生 > 云消息队列 > 正文

MQTT中我们现在有以下场景,我们这样处理有啥问题没有呢?

MQTT中我们现在有这样的场景:
服务端通过 p2p 方式发送消息到客户端。客户端A是通过进程通信方式,需要另一个进程B真正处理消息,是异步交互的,B处理后再异步通知客户端进程。没法通过
正常处理消息这种方式自动ack.

没法主动ack的话;我们想的是第一次通知B处理,但是A抛异常,不自动ack;等离线消息来的时候A检查处理完成没有,再自动ack, 如果还没收到B的回执,可能会再抛异常,直到确认结果。
请问这样处理有啥问题没有呢?离线消息来的时候指的是第二次或者后续的重投。

展开
收起
十一0204 2023-08-09 07:57:27 66 0
1 条回答
写回答
取消 提交回答
  • 意中人就是我呀!

    "这样处理有点奇怪,重投只是为了保证消息到达,业务强依赖这个有点奇怪,应该是A中设置异步调用B,B处做幂等,B做完了就调用A回调通知完成。A等待异步结果最终返回ack或者超时。你的方案理论上没有问题,做充分测试符合你们业务预期即可。不过注意重投有次数限制,超出一定次数就不会重投了,这个值目前最低是10. 离线消息的概念是针对客户端订阅的,clean session为true的话,消费者客户端再次上线时,将不再关心之前所有的订阅关系以及离线消息。clean session为false时,消费者客户端再次上线时,还需要处理之前的离线消息,而之前的订阅关系也会持续生效。所以重投和离线的概念无关。
    可以看下相关概念
    https://help.aliyun.com/document_detail/59914.html?spm=a2c4g.42419.0.i1
    https://help.aliyun.com/document_detail/42420.html?spm=a2c4g.59914.0.0.27a386f62x80M9#concept-42420-zh
    此回答整理至钉群“阿里云 微消息队列 MQTT产品咨询群”。"

    2023-08-09 11:27:36
    赞同 展开评论 打赏

涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/

相关产品

  • 云消息队列 MQ
  • 相关电子书

    更多
    RocketMQ Client-GO 介绍 立即下载
    RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载
    基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载