- 1.2 EMQ简介
- 1.3 快速开始
- 1.3.1 集群信息
- 1.3.2 控制台管理示例
- 1.3.3 代码示例
- 1.3.4 SDK
- 1.4 基础知识
- 1.4.1 基本概念
- 1.4.2 消息状态和接收模型
- 1.5 常见问题
- 1.5.1 Queue
- 1.5.2 Message
- 1.5.3 常见异常
- 1.5.4 其他
- 1.6 Queue API
- 1.6.1 创建/删除/清理 Queue
- 1.6.2 设置 Queue 属性/配额
- 1.6.3 获取 Queue 信息
- 1.6.4 Queue 权限操作
- 1.6.5 拷贝 Queue 元数据
- 1.7 Message API
- 1.7.1 发送 Message
- 1.7.2 接收 Message
- 1.7.3 更改 Message 不可见时间
- 1.7.4 删除(ACK) Message
- 1.7.5 重新驱动 Message
- 1.7.6 查询 Message
- 1.7.7 直接删除 Message
- 1.8 报警/统计 API
- 1.8.1 设置/获取 用户联系/配额信息
- 1.8.2 添加/移除/获取 Queue 报警策略
- 1.8.3 设置/获取 Queue 每日消息统计
- 1.9 高级队列功能
- 1.9.1 多读者/Tag
- 1.9.1.1 模型介绍
- 1.9.1.2 相关API
- 1.9.2 死信队列
- 1.9.3 Topic Queue
- 1.9.4 Priority Queue
- 1.10 计费规则
- 1.11 新旧版认证迁移
1.5.2 Message
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论