From 51bd88581c019ffa6fe8d0db3e9f9994511e05cf Mon Sep 17 00:00:00 2001 From: javahongxi Date: Fri, 16 Nov 2018 19:01:17 +0800 Subject: [PATCH] =?UTF-8?q?RocketMQ=E5=B0=8F=E7=BB=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- whatsmars-mq/whatsmars-mq-rocketmq/README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/whatsmars-mq/whatsmars-mq-rocketmq/README.md b/whatsmars-mq/whatsmars-mq-rocketmq/README.md index febb2198..a379006d 100644 --- a/whatsmars-mq/whatsmars-mq-rocketmq/README.md +++ b/whatsmars-mq/whatsmars-mq-rocketmq/README.md @@ -64,9 +64,10 @@ NameServer本身是无状态的,也就是说NameServer中的Broker、Topic等 + Topic维度:假如一个Topic的消息量特别大,但集群水位压力还是很低,就可以扩大该Topic的队列数,Topic的队列数跟发送、消费速度成正比。 + Broker维度:如果集群水位很高了,需要扩容,直接加机器部署Broker就可以。Broker起来后向Namesrv注册,Producer、Consumer通过Namesrv 发现新Broker,立即跟该Broker直连,收发消息。 -- Producer: 失败默认重试2次;sync/async;ProducerGroup,在事务消息机制中,如果发送消息的producer在还未commit/rollback前挂掉了,broker会在一段时间后回查ProducerGroup里的其他实例,确认消息应该commit/rollback -- Consumer: DefaultPushConsumer/DefaultPullConsumer,push也是用pull实现的,采用的是长轮询方式; -CLUSTERING/BROADCASTING,一条消息只会被一个ConsumerGroup里的一个实例消费,但可以被多个ConsumerGroup消费(广播模式) +- Producer: 失败默认重试2次;sync/async;ProducerGroup,在事务消息机制中,如果发送消息的producer在还未commit/rollback前挂掉了, +broker会在一段时间后回查ProducerGroup里的其他实例,确认消息应该commit/rollback +- Consumer: DefaultPushConsumer/DefaultPullConsumer,push也是用pull实现的,采用的是长轮询方式;CLUSTERING模式下,一条消息只会被ConsumerGroup +里的一个实例消费,但可以被多个不同的ConsumerGroup消费,BROADCASTING模式下,一条消息会被ConsumerGroup里的所有实例消费。 - DefaultPushConsumer: Broker收到新消息请求后,如果队列里没有新消息,并不急于返回,通过一个循环不断查看状态,每次waitForRunning一段时间(5s),然后在check。 当一直没有新消息,第三次check时,等待时间超过suspendMaxTimeMills(15s),就返回空结果。在等待的过程中,Broker收到了新的消息后会直接调用notifyMessageArriving 返回请求结果。“长轮询”的核心是,Broker端Hold住(挂起)客户端客户端过来的请求一小段时间,在这个时间内有新消息到达,就利用现有的连接立刻返回消息给Consumer。“长轮询” -- GitLab