各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 的访问限制