注册中心。可以部署多个实现高可用。所有broker会向nameserver上报,但nameserver之间不互相通报。所有数据放在内存中(可配置成持久化,但没有必要)
实例
// 启动mq broker(向指定中心注册) ./mqbroker -n localhost:9876
启动的时候,会向所有的nameser注册,建立长链接,定时上报
在rocketMQ中,只存在queue,queue的消费模式,是由消费者指定的。
topic是一个逻辑概念:多个queue组成一个topic,消费这个topic即可以消费这个topic下的所有queue
同一组内的设置,比如consumer的模式,过滤器的条件等等,都需要一致
消费者决定消息是一次消费还是可以广播。
MessageModel.CLUSTERING 保证每个集群中的任意一个consumer消费一次
MessageModel.BROADCASTING 每一个consumer都要消费
// 广播消息,类似于activeMq中的topic模式, consumer.setMessageModel(MessageModel.BROADCASTING);
consumer.subscribe(topicName, tag); // 接收消息可以用tag过滤 // 也可以用sql表达式过滤tag Message msg = new Message(topicName,"helloWorld".getBytes()); msg.putUserProperty("age", String.valueOf(18)); MessageSelector selector = MessageSelector.bySql("age ==5")第一次; consumer.subscribe(topicName, selector);
rocketMQ使用的是2pc。(区别是 tcc会local住资源)
往同一个topic下的同一个queue发送数据,且发数据用一个线程去发,保证发送的顺序性。
(事务producer可以设置线程池)
消费者必须要设置一个线程,并且用order的监听器监听。