消息队列优势
削峰填谷:主要解决瞬时写压力大于应用服务能力导致消息丢失、系统崩溃
系统解耦:解决不同重要程度、不同能力级别系统之间的依赖,避免一挂全挂的情况
提升性能:当存在一对多调用时,可以发一条消息给mq,让各个系统自主去消费
蓄流压测:线上环境一些系统/分支不好压测, 可以通过堆积一定的数据在放开压测
RocketMQ各部分角色介绍
1、NameServer:一个几乎无状态节点,可集群部署,节点之间无任何信息同步。
2、Broker:分为Master和Slave,一个Master对应多个Slave,但一个Slave只能对应一个Master,Master与Slave对应关系通过指定相同的Broker Name,不同的Broker Id来定义。BrokerId为0表示Master,非0表示Slave。
每个Borker与Name Server集群中的所有节点建立长连接,每30s注册Topic信息到所有的Namer Server。Name Server每10s扫描所有存货Broker的连接,如果Name Server超过2分钟没有收到心跳,则Name Server断开与Broker的连接。
3、Producer:Producer与Name Server集群中的随机一个节点建立长连接,定期从Name Server取Topic路由信息,并向提供Topic服务的Master建立长连接,且定时向Master发送心跳。Producer完全无状态。
4、Consumer:Consumer与Name Server集群中的随机一个节点建立长连接,定期从Name Server取Topic路由信息,并向提供Topic服务的Master、Slave建立长连接,且定时向Master、Slave发送心跳。
5、Topic:不同类型的消息存放在不同的Topic中。
6、Message Queue:Topic可以设置一个或多个Message Queue,Message Queue类似分区或Partition。有多个Message Queue后,消息可以并行地向各个Message Queue发送,消费者也可以并性地从多个Message Queue读取消息消费
多机集群配置和部署
1、启动NameServer:nohup sh bin/mqnamesrv &
2、启动Broker:nohup sh bin/mqbroker -c config_file &
3、启动RocketMQ-console:nohup sh bin/rocketmq-console &
1、namesrvAddr:NameServer的地址,可配置多个用;分开。
2、brokerClusterName:Cluster的地址,如果集群机器数多的话,可以分为多个Cluster,每个Cluster供一个业务群使用。
3、brokerName:Broker的名称,Master和Slave通过使用相同的Broker名称来表明相互关系,以说明某个Slave是哪个Master的Slave。
4、borkerId:一个Master Borker可以有多个Slave,0表示Master,非0表示不同Slave的ID。
5、fileReserevedTime:在磁盘上保存消息的时长,单位是小时,自动删除超时的消息。
6、deleteWhen:与fileReservedTime参数呼应,表明在几点做信息删除动作。
7、brokerRole:分为3中,SYNC_MASTER、ASYNC_MASTER、SLAVE。SYNC和ASYNC表示Master和Slave之间同步消息的机制,SYNC表示当Slave和Master消息同步完成后,再返回发送成功的状态。
8、flushDiskType:表示刷盘策略,分为SYNC_FLUSH和ASYNC_FLUSH,代表同步刷盘和异步刷盘。同步刷盘情况下,消息真正写入磁盘后再返回成功状态;异步刷盘情况下,消息写入page_cache后就返回成功状态。
9、listenPort:Broker监听的端口号,如果一台机器上启动了多个Broker,要设置不同的端口号。
10、storePathRootDir:存储消息和一些配置信息的根目录。
发送/接受消息实例
发送
创建一个DefaultMQProducer对象,设置好GroupName和NameServer地址后启动。
然后把待发送的消息拼装成Message对象,使用Producer发送。
接受
常用管理命令
1、创建/修改Topic:updateTopic
2、删除Topic:deleteTopic
3、创建/修改订阅组:updateSubGroup
4、删除订阅组:deleteSubGroup
5、更新Broker配置:updateBrokerConfig
6、更新Topic的读写权限:updateTopicPerm
7、查看Topic的路由信息:TopicRoute
8、查看Topic列表信息:TopicList
9、查看Topic统计信息:TopicStats
10、根据时间查询消息:printMsg
11、根据消息ID查询消息:queryMsgById
12、查看集群信息:clusterList
领取专属 10元无门槛券
私享最新 技术干货