阿里云消息队列RocketMQ使用需要注意的地方

消息发送了但是没有收到怎么办
消息队列RocketMQ提供了多种消息查询方式:
1.  使用Topic和Message ID对消息进行精准查询。
2.  使用Topic和Message Key较为精准地查询具有相同Message Key的一类消息。
3.  使用Topic按时间范围进行查询,可以查询到一段时间内某Topic收到的所有消息。

新创建的ConsumerID从哪里开始消费
1.  如果这个Consumer ID对应的消费者是第一次启动,则会忽略启动之前发送的消息,也就是忽略历史消息,从启动之后发送的消息开始消费。
2.  如果这个Consumer ID是第二次启动,那么从上次消费的位置开始消费。
3.  如果想从特定位置开始消费,可以通过消息队列RocketMQ控制台的重置消费位点功能,指定到具体的时间开始消费。每次重置只针对特定Consumer ID下的特定Topic,不会影响其他消费者。

消息队列RocketMQ是否能保证消息不重复
绝大多数情况下,消息是不重复的。作为一款分布式消息中间件,在网络抖动、应用处理超时等异常情况下,无法保证消息不重复,但是能保证消息不丢失。

消息队列RocketMQ消息在服务器保存多长时间
存储的消息最多保存3天,超过3天未消费的消息会被删除。

消息队列RocketMQ消息Body的长度限制是多少
消息大小根据消息类型来限制。具体限制如下所述:
普通消息和顺序消息:4MB
 
同一条消息是否可以既是顺序消息同时又支持定时消息和事务消息
不可以。顺序消息、定时消息、事务消息是不同的消息类型,三者是互斥关系,不能叠加在一起使用。

RocketMQ是如何计费的
消息队列RocketMQ费用= API调用费+ Topic资源占用费。
 
昨天删除了Topic为什么今天会收到账单并被扣费
Topic 资源占用费以每天00:00-23:59:59为周期进行计费,第二天收费。所以,昨天删除Topic,昨天的计费系统已经计入,今天会出账单进行扣费,明天就不会出账单扣费。

API调用次数计算方式
一天的消息总量为 631,238 条,但是通过费用查询结果:API 调用次数为 126,315,056 次,那么多API调用次数怎么来的?
 
API调用次数=发送消息API调用次数+订阅消息API调用次数+长轮询API调用次数(长轮询说明:Consumer为保证消息实时推送而产生的API调用,每个队列15秒一次长轮询,在此期间,若队列内有消息产生,则不计长轮询次数)。

如何关闭消息队列服务
删除所有topic资源,并将所有发送端,消费端进程停止。

发布方消息负载均衡策略
消息队列RocketMQ针对发布方采取的是轮询制,即Producer的消息以轮询的方式发送至Queue,
图中箭头线条上的标号代表顺序,发布方会把第一条消息发送至Queue 0,然后第二条消息发送至Queue 1,以此类推,第八条消息发送至Queue 7,第九条消息又发送至Queue 0,循环往复。
 
订阅方消息负载均衡策略
消息队列RokcetMQ包含Broker和Name Server等节点,其中Broker节点负责将Topic的路由信息上报至Name Server节点。
假设目前消息队列RocketMQ只有一个Broker节点,消息从Producer发送至消息队列E-RocketMQ的 Topic,默认会将这些Topic下的消息均衡负载至8个Queue(逻辑概念)。RocketMQ Broker会将这些 Queue再平均分配至属于同一个订阅方集群。
因此,每台订阅方机器处理的Queue的数量有以下几种可能:
若订阅方机器数量大于Queue的数量,则超出Queue数量的机器会处理0个Queue上的消息
若订阅方机器数量等于Queue的数量,则每台机器会处理1个Queue上的消息
若订阅方机器数量小于Queue的数量,则每台机器会处理多个Queue上的消息