内容简介:rocketmq的producer 和 Consumer的特性比较了解。源码:https://github.com/limingios/netFuture/tree/master/jms 中的rocketmq-test项目
rocketmq的producer 和 Consumer的特性比较了解。
源码:https://github.com/limingios/netFuture/tree/master/jms 中的rocketmq-test项目
(一)Producer详解
-
普通消息
>涉及到的类
org.apache.rocketmq.client.impl.CommunicationMode
org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl#sendDefaultImpl
- 定时消息
消息发到 Broker 后,不能立刻被 Consumer 消费,要到特定的时间点或者等待特定的时间后才能被消费。
固定精度:
1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h
涉及到的类org.apache.rocketmq.store.config.MessageStoreConfig#messageDelayLevel
- 顺序消息
涉及到的类
org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl#sendSelectImpl
在分布式队列实现排序,这个需求怎么做?
优先级:订单号20180206(queu1 )订单号20180207(queue2)
排序+优先级(分片)
-
事物消息
(二)Consumer详解
-
Pull&push模式
>DefaultMQPullConsumer
DefaultMQPushConsumer
- 消费模型
org.apache.rocketmq.common.protocol.heartbeat.MessageModel#BROADCASTING org.apache.rocketmq.common.protocol.heartbeat.MessageModel#CLUSTERING
- 消费选择
org.apache.rocketmq.common.consumer.ConsumeFromWhere#CONSUME_FROM_LAST_OFFSET org.apache.rocketmq.common.consumer.ConsumeFromWhere#CONSUME_FROM_FIRST_OFFSET org.apache.rocketmq.common.consumer.ConsumeFromWhere#CONSUME_FROM_TIMESTAMP
- 重试策略
Consumer 消费消息失败后,要提供一种重试机制,令消息再消费一次。Consumer 消费消息失败
- 消息重复幂
RocketMQ无法避免消息重复,所以如果业务对消费重复非常敏感,务必要在业务层面去重
- 消息回溯
回溯消费是指Consumer已经消费成功的消息,由于业务上需求需要重新消费,要支持此功能。
RocketMQ支持按照时间回溯消费,时间维度精确到毫秒,可以向前回溯,也可以向后回溯。
使用命令:sh mqadmin resetOffsetByTime -g xx -s yy -t tt
- Producer|consumer Group:
- 可以通过运维工具(上次说过的rocketmq-console)查询这个组下有多少Producer实例。
- 可通过运维 工具 查询这个组下的消费进度,多少个Consumer实例。
- 事务消息,如果Producer意外宕机,Broker会主动回调Producer Group中的任意一台机器确认事务状态。
- 集群模式,一个Consumer Group下的多个Consumer均摊消费消息;广播模式,group无意义。
(三)NameServer
- 作用
- 每个Broker启动的时候会向Namesrv发送注册请求,Namesrv接收Broker的请求注册路由信息,NameServer保存活跃的broker列表,包括Master和Slave。
- 用来保存所有topic和该topic所有队列的列表。
- NameServer用来保存所有broker的Filter列表。
- 接收client(Producer和Consumer)的请求根据某个topic获取所有到broker的路由信息。
总结:维护路由信息、维护broker数据。
-
启动过程
org.apache.rocketmq.namesrv.NamesrvStartup
org.apache.rocketmq.namesrv.NamesrvController#initialize
org.apache.rocketmq.namesrv.kvconfig.KVConfigManager#load
org.apache.rocketmq.remoting.netty.NettyRemotingServer(初始化远程服务、线程池服务)
初始化过程执行
- 读取配置文件
- 调用初始化方法#108
- 注册broker处理接受消费和消费消息等功能
- 定时去扫描不活跃的broker
(四)Broker
- 作用
消息接受、存储(恢复)、与个节点之间通讯。
- 启动过程>org.apache.rocketmq.broker.BrokerStartup#createBrokerController#210
org.apache.rocketmq.common.ConfigManager#load#加载文件(store/config)内容
org.apache.rocketmq.store.DefaultMessageStore#load加载磁盘文件内容
org.apache.rocketmq.remoting.netty.NettyRemotingServer初始化通信层 线程池
org.apache.rocketmq.broker.BrokerController#registerProcessor 注册远程服务
- DefaultMessageStore
持久核心处理类
- FlushConsumeQueueService >逻辑队列刷盘服务
- CleanCommitLogService 清理物理文件服务,定期清理72小时之前的物理文件。
- CleanConsumeQueueService 定期清理在逻辑队列中的物理偏移量小于commitlog中的最小物理偏移量的数据
- HAService 用于commitlog数据的主
- ScheduleMessageService 用于监控延迟消息,并到期后执行
- TransactionStateService 用于事务消息状态文件
初始化过程执行
1. 初始化>createBrokerController>initialize
2. 加载topic、消费进度、订阅关系
3. 加载本地消息messageStore.load
4. 远程通讯NettyRemotingServer、加载处理消息类。5
5. 初始化发送线程池sendMessageExecutor、拉取消息线程池(pullMessageExecutor)、管理Broker线程池(adminBrokerExecutor)、客户端管理线程池(clientManageExecutor)。
- 注册事件处理器,包括发送消息事件处理器(SendMessageProcessor)、拉取消息事件处理器、查询消息事件处理器(QueryMessageProcessor,包括客户端的心跳事件、注销事件、获取消费者列表事件、更新更新和查询消费进度consumerOffset)、客户端管理事件处理器、结束事务处理器(EndTransactionProcessor)、默认事件处理器(AdminBrokerProcessor)。
(五)运维
参看源码:jms里面的rocket运维
PS:特性和运维只是了解下,看下github源码中的文档,里面介绍的更加详细。
>>原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!
>>原文链接地址:上一篇:已是最新文章
以上所述就是小编给大家介绍的《『互联网架构』软件架构-rocketmq之特性和运维(64)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 『互联网架构』软件架构-redis特性和集群特性(中)(49)
- 『互联网架构』软件架构-redis特性和集群特性(上)(48)
- 『互联网架构』软件架构-redis特性和集群特性(下)(50)
- ClickHouse的核心特性及架构
- 软件架构基础(四): 你的架构需要考虑到的特性
- 『互联网架构』软件架构-Sharding-Sphere特性详解(67)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Release It!
Michael T. Nygard / Pragmatic Bookshelf / 2007-03-30 / USD 34.95
“Feature complete” is not the same as “production ready.” Whether it’s in Java, .NET, or Ruby on Rails, getting your application ready to ship is only half the battle. Did you design your system to......一起来看看 《Release It!》 这本书的介绍吧!