返回介绍

1.5.2 Message

发布于 2020-10-01 15:14:14 字数 6265 浏览 949 评论 0 收藏 0

1. Message可以附带数据吗?比如一幅图片?

可以。 用户在sendMessage()时可以附加若干条属性。属性既可以是String类型,也可以是byte[]类型。 对于较小的图片或二进制文件,可以直接把它作为byte[]类型的属性附加在Message中。如果文件较大,可以先把文件存储在对象存储系统中(比如FDS),再将文件的地址作为String类型的属性。

2. EMQ的batch操作具有原子性吗?一次batch操作可以处理多少条Message?

sendMessageBatch()有原子性;其它batch操作不具有原子性。 一次batch操作的Message条数,建议限制在100条以下。 另外,一次sendMessageBatch()操作发送的Message的总大小(Message附加的attribute包括在内),不应超过Queue创建时所设置的上限(上限最大为256 KB)。

3. changeMessageVisibilitySeconds()这个API一般在什么场景下使用?

有当Receiver发现自己无法处理收到的Message,或者预估处理此条Message所需时间大于invisibilitySeconds时,才需要使用这个API改变Message的可见性超时。

4. createTag()receiveMessage()都可以按消息的属性进行过滤。它们在使用场景上有什么区别?

Tag(包括Queue对应的default Tag)在逻辑上可以视为一条Message管道。 createTag()参数中的filter限制了进入管道的Message的类型;而设置了filter的receiveMessage()仅是把其需要的Message从管道中取走。如果管道中的某些Message一直没有被取走,那么将最终影响其它Message的收取。 具体而言,如果Message分为A/B两种,需要分别被两类Receiver接收。那么可以创建一个不带filter的Tag,并且在receiveMessage()时指定接收消息的属性。 如果仅需要接收A,不需要B,那么就应该在创建Tag时指定filter。否则,进入Tag的B类Message最终将影响Receiver对A的接收。

5. 为什么消息重复了?

忘记Ack(如处理异常时),或极少数情况下(比如服务器重启)服务导致的Ack失效。如果难以排查可以联系EMQ支持人员帮忙排查。

6. emq中显示有消息,但查询不出来

1.检查EMQ控制台 可读消息 一栏是否为0,只有这一栏不为0才有消息可以接收。2.如果设置的是短轮询,是有一定概率拿不到数据的,可以更换为长轮询再尝试一下。3.如果设置的是长轮询,检查一下长轮询过期时间是否设置的太短,设置太短可能会造成还未遍历到有数据的机器就超时返回了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文