分布式消息队列RocketMQ
四、 RocketMQ应用
4.5)批量消息
4.5.1)批量发送消息
4.5.1.1)发送限制
生产者进行消息发送时可以一次发送多条消息,这可以大大提升Producer的发送效率,不过需要注意以下几点:
-
批量发送的消息必须具有相同的Topic
-
批量发送的消息必须具有相同的刷盘策略
-
批量发送的消息不能是延时消息与事务消息
4.5.1.2)批量发送大小
默认情况下,一批发送的消息总大小不能超过4MB字节;如果想超出该值,有两种解决方案:
-
将批量消息进行拆分,拆分为若干不大于4M的消息集合分多次批量发送
-
在Producer端与Broker端修改属性
Producer端需要在发送之前设置Producer的maxMessageSize属性
Broker端需要修改其加载的配置文件中的maxMessageSize属性
4.5.1.3)生产者发送的消息大小
Producer发送消息Message的结构如下图:

生产者通过send()方法发送的Message,并不是直接将Message序列化后发送到网络上的,而是通过这个Message生成了一个字符串发送出去的;
这个字符串由四部分构成:Topic、消息Body、消息日志 (占20字节)及用于描述消息的一堆属性key-value;这些属性中包含例如生产者地址、生产时间、 要发送的QueueId等;
最终写入到Broker中消息单元中的数据都是来自于这些属性。
4.5.2)批量消费消息
4.5.2.1)修改批量属性

Consumer的MessageListenerConcurrently监听接口的consumeMessage()方法的第一个参数为消息列表,但默认情况下每次只能消费一条消息,若要使其一次可以消费多条消息,则可以通过修改 Consumer的consumeMessageBatchMaxSize属性来指定,不过,该值不能超过32。
因为默认情况下消费者每次可以拉取的消息多是32条,若要修改一次拉取的大值,则可通过修改Consumer的 pullBatchSize属性来指定。
4.5.2.2)存在的问题
Consumer的pullBatchSize属性与consumeMessageBatchMaxSize属性是否设置的越大越好?
——》当然不是
pullBatchSize值设置的越大,Consumer每拉取一次需要的时间就会越长,且在网络上传输出现问题的可能性就越高;若在拉取过程中若出现了问题,

本文介绍了RocketMQ的批量消息处理,包括批量发送消息的限制、大小调整和生产者发送消息的结构。同时,详细阐述了批量消费消息的设置、可能的问题以及如何通过代码实现案例来避免发送消息超出限制。
最低0.47元/天 解锁文章
2008

被折叠的 条评论
为什么被折叠?



