前言
在这里先祝福大家新年快乐!因为假期原因,距离上一篇的生产者教程已经过了很久,今天是上班的第一天,我们继续分享RocketMQ的第四篇教程,主要介绍消费者相关的知识。
一、消费者概述
消费者组:一个逻辑概念,在使用消费者时需要指定一个组名。一个消费者组可以订阅多个Topic。
消费者实例:一个消费者组程序部署了多个进程,每个进程都可以称为一个消费者实例。
订阅关系:一个消费者组订阅一个Topic的某一个 Tag,这种记录被称为订阅关系。
实际使用中,要保证消费订阅关系一致,一个消费者组中的订阅Topic和Tag必须一致。
二、集群消费模式和广播消费模式
1.集群消费模式
在同一个消费组中,消费者是负载均衡的消费Topic中的消息。
设置消费模式为集群模式
consumer.setMessageModel(MessageModel.CLUSTERING);
生产者:
每一秒生产一条数据
//创建DefaultMQProducer消息生产者对象
DefaultMQProducer producer = new DefaultMQProducer("TestProducerGroup");
//设置NameServer
producer.setNamesrvAddr("192.168.2.5:9876");
//设置NameServer节点地址,多个节点间用分号分割
try {
//与NameServer建立长连接
producer.start();
//发送一百条数据
for (int i = 1; i <= 10; i++) {
//1S中发送一次
Thread.sleep(1000);
JSONObject json = new JSONObject();
json.put("orderId", i);
json.put("desc", "这是第" + i + "个订单");
//数据正文
String data = json.toJSONString();
Message message = new Message("TopicOrder", "", data.getBytes());
//发送消息,获取发送结果
SendResult result = producer.send(message);
//将发送结果对象打印在控制台
System.out.println("消息已发送:MsgId:" + result.getMsgId() + ",发送状态:"
+ result.getSendStatus());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
producer.shutdown();
} catch (Exception e) {
}
}
启动两个消费者
//创建消费者对象
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("TestPushConsumerGroup");
try {
//设置NameServer节点
consumer.setNamesrvAddr("192.168.2.5:9876");
//订阅主题
consumer.subscribe("TopicOrder", "*");
//设置消费模式为集群模式
consumer.setMessageModel(MessageModel.CLUSTERING);
//创建监听,当有新的消息监听程序会及时捕捉并加以处理。
consumer.registerMessageListener(new MessageListenerConcurrently() {
public ConsumeConcurrentlyStatus consumeMessage(
List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
//批量数据处理
for (MessageExt msg : msgs) {
System.out.println("消费者获取数据:" + msg.getMsgId() + "==>" + new
String(msg.getBody()));
}
//返回数据已接收标识
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;

3390

被折叠的 条评论
为什么被折叠?



