Rocketmq 消费者默认是集群的方式消费的,消费者还可以用广播的模式进行消费。广播模式消费就是所有订阅同一个主题的消费者都会收到消息。代码实现上其实很简单,就是在消费端添加

  1. consumer.setMessageModel(MessageModel.BROADCASTING);

就可以了。我们看实验步骤:

一、启动ConsumerBroadCastMember1

二、启动ConsumerBroadCastMember2

三、运行ProducerBraodCast

四、我们可以看到两个Consumer都收到了同样的消息。

Producer端:

  1. package org.hope.lee.producer;
  2.  
  3. import com.alibaba.rocketmq.client.exception.MQBrokerException;
  4. import com.alibaba.rocketmq.client.exception.MQClientException;
  5. import com.alibaba.rocketmq.client.producer.DefaultMQProducer;
  6. import com.alibaba.rocketmq.client.producer.SendCallback;
  7. import com.alibaba.rocketmq.client.producer.SendResult;
  8. import com.alibaba.rocketmq.common.message.Message;
  9. import com.alibaba.rocketmq.common.message.MessageQueue;
  10. import com.alibaba.rocketmq.remoting.exception.RemotingException;
  11.  
  12. public class ProducerBroadCast {
  13. public static void main(String[] args) {
  14. DefaultMQProducer producer = new DefaultMQProducer("push_consumer");
  15. producer.setNamesrvAddr("192.168.31.176:9876;192.168.31.165:9876");
  16. try {
  17. // 设置实例名称
  18. producer.setInstanceName("producer_broadcast");
  19. // 设置重试次数
  20. producer.setRetryTimesWhenSendFailed(3);
  21. // 开启生产者
  22. producer.start();
  23. // 创建一条消息
  24. Message msg = new Message("topic_broadcast", "TagA", "OrderID0034", "message_broadcast_test".getBytes());
  25. SendResult send = producer.send(msg);
  26. System.out.println("id:--->" + send.getMsgId() + ",result:--->" + send.getSendStatus());
  27.  
  28. } catch (MQClientException e) {
  29. e.printStackTrace();
  30. } catch (RemotingException e) {
  31. e.printStackTrace();
  32. } catch (MQBrokerException e) {
  33. e.printStackTrace();
  34. } catch (InterruptedException e) {
  35. e.printStackTrace();
  36. }
  37. producer.shutdown();
  38. }
  39. }

Consumer端:

  1. package org.hope.lee.consumer;
  2.  
  3. import java.util.List;
  4.  
  5. import com.alibaba.rocketmq.client.consumer.DefaultMQPushConsumer;
  6. import com.alibaba.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
  7. import com.alibaba.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
  8. import com.alibaba.rocketmq.client.consumer.listener.MessageListenerConcurrently;
  9. import com.alibaba.rocketmq.client.exception.MQClientException;
  10. import com.alibaba.rocketmq.common.consumer.ConsumeFromWhere;
  11. import com.alibaba.rocketmq.common.message.MessageExt;
  12. import com.alibaba.rocketmq.common.protocol.heartbeat.MessageModel;
  13.  
  14. public class ConsumerBroadCastMember1 {
  15. public static void main(String[] args) throws MQClientException {
  16. DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("consumer_broadcast");
  17. consumer.setNamesrvAddr("192.168.31.176:9876;192.168.31.165:9876");
  18. // 批量消费,每次拉取10条
  19. consumer.setConsumeMessageBatchMaxSize(10);
  20. //设置广播消费
  21. consumer.setMessageModel(MessageModel.BROADCASTING);
  22. //设置集群消费
  23. // consumer.setMessageModel(MessageModel.CLUSTERING);
  24. // 如果非第一次启动,那么按照上次消费的位置继续消费
  25. consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
  26. // 订阅PushTopic下Tag为push的消息
  27. consumer.subscribe("topic_broadcast", "TagA || Tag B || Tage C");
  28. consumer.registerMessageListener(new MqBroadCastListener());
  29. consumer.start();
  30. System.out.println("Consumer1 Started.");
  31.  
  32. }
  33. }
  34. class MqBroadCastListener implements MessageListenerConcurrently{
  35. public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
  36. try {
  37. MessageExt msg = msgs.get(0);
  38. String msgBody = new String(msg.getBody(), "utf-8");
  39. System.out.println("msgBody:" + msgBody);
  40. } catch(Exception e) {
  41. e.printStackTrace();
  42. return ConsumeConcurrentlyStatus.RECONSUME_LATER;
  43. }
  44. return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
  45. }
  46.  
  47. }
  1. package org.hope.lee.consumer;
  2.  
  3. import java.util.List;
  4.  
  5. import com.alibaba.rocketmq.client.consumer.DefaultMQPushConsumer;
  6. import com.alibaba.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
  7. import com.alibaba.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
  8. import com.alibaba.rocketmq.client.consumer.listener.MessageListenerConcurrently;
  9. import com.alibaba.rocketmq.client.exception.MQClientException;
  10. import com.alibaba.rocketmq.common.consumer.ConsumeFromWhere;
  11. import com.alibaba.rocketmq.common.message.MessageExt;
  12. import com.alibaba.rocketmq.common.protocol.heartbeat.MessageModel;
  13.  
  14. public class ConsumerBroadCastMember2 {
  15. public static void main(String[] args) throws MQClientException {
  16. DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("consumer_broadcast");
  17. consumer.setNamesrvAddr("192.168.31.176:9876;192.168.31.165:9876");
  18. // 批量消费,每次拉取10条
  19. consumer.setConsumeMessageBatchMaxSize(10);
  20. //设置广播消费
  21. consumer.setMessageModel(MessageModel.BROADCASTING);
  22. //设置集群消费
  23. // consumer.setMessageModel(MessageModel.CLUSTERING);
  24. // 如果非第一次启动,那么按照上次消费的位置继续消费
  25. consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
  26. // 订阅PushTopic下Tag为push的消息
  27. consumer.subscribe("topic_broadcast", "TagA || Tag B || Tage C");
  28. consumer.registerMessageListener(new MqBroadCastListener());
  29. consumer.start();
  30. System.out.println("Consumer2 Started.");
  31.  
  32. }
  33. }

结果:

https://gitee.com/huayicompany/RocketMQ-learn/tree/master/rocketmq-api

RocketMQ-广播模式消费的更多相关文章

  1. rocketmq广播消息

    发布与模式实现.广播就是向一个主题的所有订阅者发送同一条消息. 在发送消息的时候和普通的消息并与不同之处,只是在消费端做一些配置即可. Consumer消息消费 public class Broadc ...

  2. Python Rabbit 广播模式

    Exchange 在RabbitMQ下进行广播模式需要用到,exchange这个参数,它会把发送的消息推送到queues队列中,exchange必须要知道,它接下来收到的消息要分给谁,是要发给一个qu ...

  3. Exchange-fanout 广播模式

    一.前言 我们看到生产者将消息投递到Queue中,实际上这在RabbitMQ中这种事情永远都不会发生.实际的情况是,生产者将消息发送到Exchange(交换器,下图中的X),由Exchange将消息路 ...

  4. RabbitMQ基本用法、消息分发模式、消息持久化、广播模式

    RabbitMQ基本用法 进程queue用于同一父进程创建的子进程间的通信 而RabbitMQ可以在不同父进程间通信(例如在word和QQ间通信) 示例代码 生产端(发送) import pika c ...

  5. RabbitMQ广播模式

    广播模式:1对多,produce发送一则消息多个consumer同时收到.注意:广播是实时的,produce只负责发出去,不会管对端是否收到,若发送的时刻没有对端接收,那消息就没了,因此在广播模式下设 ...

  6. RocketMQ集群消费的那些事

    说明 RocketMQ集群消费的时候,我们经常看到类似注释里面 (1,(2 的写法,已经有时候有同学没注意抛异常的情况就是(3 模拟的情况.那么这3种情况到底是怎么样的呢?你是否都了然于心呢?下面我们 ...

  7. RocketMQ的顺序消费和事务消费

    一.三种消费 :1.普通消费 2. 顺序消费 3.事务消费 1.1  顺序消费:在网购的时候,我们需要下单,那么下单需要假如有三个顺序,第一.创建订单 ,第二:订单付款,第三:订单完成.也就是这个三个 ...

  8. demo rabbitmq topic(主题模式),fanout(广播模式),轮询分发,确认接收Ack处理

    //durable = true 代表持久化 交换机和队列都要为true ,持久代表服务重启,没有处理的消息依然存在 //topic 根据不同的routkey 发送和接收信息 //fanout 广播模 ...

  9. rabbitmq 交换机模式一 广播模式 fanout

    <?php require_once "./vendor/autoload.php"; use PhpAmqpLib\Connection\AMQPStreamConnect ...

随机推荐

  1. PHP正在进行时-变量

    在PHP中,变量是$+变量名,变量名遵循标识符的命名规则,可以以字母.下划线开头,可以由数字.下划线.字母组成合法的变量名. 变量声明 所有变量在使用之前应该进行声明,而且最好带上注释,虽然在PHP中 ...

  2. 【倍增】洛谷P3379 倍增求LCA

    题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询问的个数和树根结点的序号. 接下来N-1行每 ...

  3. 【Tarjan缩点】PO3352 Road Construction

    Road Construction Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 12532   Accepted: 630 ...

  4. (3两个例子)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练

    从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练 1综述http://www.cnblogs.com/jsxyhelu/p/7907241.html2环境架设http://www.cn ...

  5. Windows下安装Selenium

    安装python,建议在官网下载python3以上的版本 安装easy_install,找度娘 安装selenium,在命令行窗口下输入:pip install -U selenium 下载chrom ...

  6. python 版本管理工具 pyenv 使用备忘

    安装步骤 安装 xcode-select 以及 homebrew(前者在安装 git 的时候装过,后者 mac 开发必备无需解释) 安装 pyenv brew install pyenv,用 pyen ...

  7. Inno Setup 自定义界面心得

    因为项目需要,需要打 windows 安装包,要求安装界面完全按照需求来.作为没接触过这块儿的服务端宝宝,在此期间踩了很多坑. 坑不提也罢,最终结果圆满,记录下与大部分网上PO出来的做法不太一样的小心 ...

  8. django命令(笔记,自己看的)

    新建一个项目,名字为mysite:django-admin.py startproject mysite 新建一个应用App,名字为apppython manage.py startapp learn ...

  9. CSS3中only-child伪类选择器

    <body> <style type="text/css"> //只对li1设置样式 li:nth-child(1):nth-last-child(1){ ...

  10. android企业级商城源码、360°全景图VR源码、全民直播源码等

    Android精选源码 [新版]Android技术博客精华汇总 开源了:乐乐音乐5.0-Android音乐播放器 android实现仿真水波纹效果源码 360°全景图VR,这是一个值得把玩的APP a ...