RocketMQ角色(二)

140 阅读2分钟

consumer:消息的接收者

1,consumer(队列和ip的映射关系)

2,consumer在从nameServer获取到所有的broker信息之后,nameServer也会负载均衡一个broker进行工作

3,一但producer和broker建立长连接之后,30s一次心跳,确认broker信息

topic:

类似于消息桶,把不同项目的不同消息做下目录上的区分,注意这也是唯一一次区分

1,每个topic下多个队列-->也叫分区.每个队列只支持一个消费者消费消息,不同分区可以被多个消费者消费

2,对于集群消息一般来说每个消息只会选择一个分区也就是一个队列去发送消息,所以不用担心消息被重复消费问题

3,由于每个队列仅支持一个消费者,每个消费者可以支持多个队列,就避免了同一消息被多次消费

4,总结:同一消费者组的消费者数量必须小于或者等于队列数量,一但消费者数量大于队列数量将会出现有消费者无队列现象

Queue:

1,创建topic时候指定的,发送消息的时候也可以设置策略,默认也是轮询

2,queue是数据分片的产物,因此和其他消息的队列不同

3,这么做也是为了增加不同consumer的消息并行避免消费过程中的多线程处理和资源锁定

Producer Group && Consumer Group

1,发送同一个topic消息的集群就被称之为生产者组

2,topic 相同 tag相同的consumer称之为消费者组

ps:这里建议说不同项目可以使用一个组,同一个逻辑消费者多个消费者组轮询接收,会造成消息重复消费

Message:消息

1,消息需要指定topic

2,flag消息的标记,比如设置唯一标识实现所谓的幂等性

3,properties 消息的元数据信息,推测存在nameServer的可能就有这个

 3.1,keys用于建立索引

 3.2,DelayTimeLevel:设置消息的延迟级别,0表示不延迟,⼤于0会延迟特定时间才被消费

 3.3,waitStoreMsgOK设置是否等待消息刷盘成功再返回

4,body消息体

5,transactionId 仅在事务消息中生效

tag:对消息进行一个二次分类,跟队列没关系

offset:

偏移量指目前消息在队列中的位置

1,有两种存储模式 broker代存和本地存储

可以通过设置ConsumerF romWhere(Timestamp 精确到秒)可以设置从需要的位置开始读,但是注意此时offset读不到时候生效,大多数初次启动生效

2,本地存储每个消费者拿到所有的消息,相互之间的消费不受影响-->广播模式

3,broker代存,每个消费者只能拿到属于自己的消息