当前位置: 首页 > news >正文

RabbitMQ的发布订阅模式

发布订阅模式

image-20230810180012118

是群发的概念,每条消息可以发送给多个消费者

在订阅模型中,多了一个 Exchange 角色

Exchange:交换机(X)。一方面,接收生产者发送的消息。另一方面,知道如何处理消息,例如递交给某个特别队列、 递交给所有队列、或是将消息丢弃。到底如何操作,取决于Exchange的类型。Exchange有常见以下3种类型:

  1. Fanout:广播,将消息交给所有绑定到交换机的队列

  2. Direct:定向,把消息交给符合指定routing key 的队列

  3. Topic:通配符,把消息交给符合routing pattern(路由模式) 的队列

    Exchange(交换机)只负责转发消息,不具备存储消息的能力,因此如果没有任何队列与 Exchange 绑定,或者没有符合 路由规则的队列,那么消息会丢失

Exchange和Queue之间还需要绑定才能发送消息

生产者代码
public class PSProducer {public static void main(String[] args) throws Exception {//创建连接ConnectionFactory cf = new ConnectionFactory();cf.setHost("192.168.64.140");ccf.setPort(5672);//可选,5672是默认端口f.setUsername("guest");cf.setPassword("guest");Connection nc = cf.newConnection();Channel cc = nc.createChannel();//定义交换机//服务器中如果没有交换机,就创建,有就直接使用cc.exccangeDeclare("logs", "fanout");//向交换机发送数据while(true) {System.out.print("输入:");String s = new Scanner(System.in).nextLine();cc.basicPublish("logs", "", null, s.getBytes());}}
}
消费者代码
public class PSConsumer {public static void main(String[] args) throws Exception {//创建连接ConnectionFactory cf = new ConnectionFactory();cf.setHost("192.168.64.140");ccf.setPort(5672);//可选,5672是默认端口f.setUsername("guest");cf.setPassword("guest");Connection nc = cf.newConnection();Channel cc = nc.createChannel();//定义交换机//服务器中如果没有交换机,就创建,有就直接使用cc.exccangeDeclare("logs", "fanout");//cc.queueDeclare(UUID.randomUUID().toString(), false, true, true, null);String queue = cc.queueDeclare().getQueue();cc.queueBind(queue, "logs", "");//处理数据DeliverCallback deliverCallback = new DeliverCallback() {@Overridepublic void handle(String consumerTag, Delivery message) throws IOException {byte[] a = message.getBody();String b = new String(a);System.out.println("收到:"+b);System.out.println("消息处理完毕");}};CancelCallback cancelCallback = new CancelCallback() {@Overridepublic void handle(String consumerTag) throws IOException {}};//3.接收数据/**第二个参数:*         true:自动确认*         false:手动确认*/cc.basicConsume(queue,true, deliverCallback, cancelCallback);}
}

上一篇文章:RabbitMQ的工作模式-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/Z0412_J0103/article/details/143354823下一篇文章: 


http://www.mrgr.cn/news/63101.html

相关文章:

  • DAYWEB69 攻防-Java 安全JWT 攻防Swagger 自动化算法签名密匙Druid 泄漏
  • 速盾:海外cdn高防
  • 前端vue2迁移至uni-app
  • 近似线性可分支持向量机的原理推导
  • 基于SSM+微信小程序的汽车维修管理系统(汽车5)
  • LaTeX 特殊符号、加帽子符号、横线和波浪线、绝对值符号
  • CSS 动画:网页设计的动态之美
  • 流水线(Pipeline)技术
  • ARKit读取LiDAR点云
  • C语言数据结构之二叉树(BINARY TREE)链式存贮的简单实现
  • 猫头虎分享:Claude AI、ChatGPT 和 知乎直答的 AI 搜索大战
  • 深入探索C语言:fread函数的高效文件读取艺术
  • 2023-2024年教育教学改革、教学成果奖等项目申请书合集-最新出炉 附下载链接
  • 【如何获取股票数据31】Python、Java等多种主流语言实例演示获取股票行情api接口之沪深A股融资融券标的股数据获取实例演示及接口API说明文档
  • 2024年10月31日Day1
  • 基于Python的自然语言处理系列(50):Soft Prompt 实现
  • IEC104规约的秘密之十九----6号文中的一些问题
  • IDEA修改生成jar包名字的两种方法实现
  • 前端八股文第八篇
  • Vue v-on 简写 @, v-bind 简写 :
  • Vue v-html v-once v-if
  • 定制化视频生成新模范!零样本主体驱动,精确运动控制!复旦阿里等发布DreamVideo-2
  • 消息队列面试——打破沙锅问到底
  • 2024最新IntelliJ IDEA常用的小技巧汇总,JAVA 新手上路必备
  • 【Oracle APEX开发小技巧10】CSS样式控制交互式报表列宽和自动换行效果
  • Nginx 实现动态封禁IP,详细教程来了