各MQ 并发性能比较
吞吐量
| |
kafka
|
17.3w/s
|
rocketMQ
|
11.6w/s
|
RabbitMQ
|
5.96w/s
|
RocketMQ组件
broker 核心业务组件
nameServe 保存broker 的ip、端口、上下线信息等。 类似注册中心
启动nameServe 时会调用 runserver
启动broker ,会默认读取/conf/broker.conf mqbroker.cmd -c ../conf/broker.conf
多节点集群
2m-2s-async 主从间异步同步
2m-2s-sync 主从间异步同步
2m-noslave 没有主从
参数
|
参数含义
|
brokerClusterName
|
集群的名字,同一网段内的相同集群名组成一个集群
|
brokerName
|
节点名,一对主从节点名相同
|
brokerRole
|
节点角色,ASYNC_MASTER异步主节点 AYNC_MASTER同步主节点 SLAVE 从节点
|
生产者发送消息的三种方式
同步发送
异步发送
单向发送
顺序消息
保证局部有序,不用关全局有序。局部有序,比如只用管单通会话有序,不用管所有用户的消息都是有序的
即,每个消息队列(MessageQueue)中是有序的,消息队列之间不保证有序
普通是在消费中注册 MessageListenerOderly
顺序消费注册的是 MessageListenerCurrently
延迟消息
Message对象 有18种预设的延迟级别,可以改配置
//1s、5s、10s、30s、1m、2m、3m、4m、5m、6m、7m、8m、9m、10m、20m、30m、1h、2h
msg.setDelayTimeLevel( 3); //延迟 10秒
在开源版中自定义延迟消息,是改造的重点。
批量消息
将多条消息整合到一条消息一次性发送,减少网络请求次数和IO
过滤消息
-
tag标签,一条消息只有一个tag,一个消费者
-
sql 语法过滤, 支持 <>= "<>" in 、not in 等
实现机制 将
consumer
指定的sql过滤规则推送到broker,由broker计算将最终结果推给 consumer
事务消息---只与生产者有关
TransactionMQProducer 本地有两个事务 execute 和 check 。broker会对unknown状态消息,过段时间调用一次本地check方法,默认最大调用次数是15。
实际运用举例(待后续与定时任务的实现方式效率比较)
配置好rocketMQ在下单后5分钟内不断让订单系统检查订单是否支付,支付后再将订单推到下游系统。
ACL权限控制
对各用户对topic 的访问限制