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

RabbitMQ---订阅模型-Fanout

1、 订阅模型-Fanout

Fanout,也称为广播。
流程图:
在这里插入图片描述

在广播模式下,消息发送流程是这样的:
1) 可以有多个消费者
2) 每个消费者有自己的queue(队列)
3) 每个队列都要绑定到Exchange(交换机)
4) 生产者发送的消息,只能发送到交换机,交换机来决定要发给哪个队列,生产者无法决定。
5) 交换机把消息发送给绑定过的所有队列
6) 队列的消费者都能拿到消息。实现一条消息被多个消费者消费

1.1、生产者

两个变化:
1) 声明Exchange,不再声明Queue
2) 发送消息到Exchange,不再发送到Queue

public class Send {private final static String EXCHANGE_NAME = "fanout_exchange_test";public static void main(String[] argv) throws Exception {// 获取到连接Connection connection = ConnectionUtil.getConnection();// 获取通道Channel channel = connection.createChannel();// 声明exchange,指定类型为fanoutchannel.exchangeDeclare(EXCHANGE_NAME, "fanout");// 消息内容String message = "Hello everyone";// 发布消息到Exchangechannel.basicPublish(EXCHANGE_NAME, "", null, message.getBytes());System.out.println(" [生产者] Sent '" + message + "'");channel.close();connection.close();}
}

1.2、消费者1

public class Recv {private final static String QUEUE_NAME = "fanout_exchange_queue_1";private final static String EXCHANGE_NAME = "fanout_exchange_test";public static void main(String[] argv) throws Exception {// 获取到连接Connection connection = ConnectionUtil.getConnection();// 获取通道Channel channel = connection.createChannel();// 声明队列channel.queueDeclare(QUEUE_NAME, false, false, false, null);// 绑定队列到交换机channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "");// 定义队列的消费者DefaultConsumer consumer = new DefaultConsumer(channel) {// 获取消息,并且处理,这个方法类似事件监听,如果有消息的时候,会被自动调用@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body) throws IOException {// body 即消息体String msg = new String(body);System.out.println(" [消费者1] received : " + msg + "!");}};// 监听队列,自动返回完成channel.basicConsume(QUEUE_NAME, true, consumer);}
}

1.3、 消费者2

public class Recv2 {private final static String QUEUE_NAME = "fanout_exchange_queue_2";private final static String EXCHANGE_NAME = "fanout_exchange_test";public static void main(String[] argv) throws Exception {// 获取到连接Connection connection = ConnectionUtil.getConnection();// 获取通道Channel channel = connection.createChannel();// 声明队列channel.queueDeclare(QUEUE_NAME, false, false, false, null);// 绑定队列到交换机channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "");// 定义队列的消费者DefaultConsumer consumer = new DefaultConsumer(channel) {// 获取消息,并且处理,这个方法类似事件监听,如果有消息的时候,会被自动调用@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties,byte[] body) throws IOException {// body 即消息体String msg = new String(body);System.out.println(" [消费者2] received : " + msg + "!");}};// 监听队列,手动返回完成channel.basicConsume(QUEUE_NAME, true, consumer);}
}

1.4、 测试

我们应该先启动生产者,否则,先启动消费者时,由于要绑定交换机,此时,交换机并不存在所以会报错。
我们运行两个消费者,然后发送1条消息:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关文章:

RabbitMQ---订阅模型-Fanout

1、 订阅模型-Fanout Fanout,也称为广播。 流程图: 在广播模式下,消息发送流程是这样的: 1) 可以有多个消费者 2) 每个消费者有自己的queue(队列) 3) 每个队列都要绑定…...

nginx 中新增url请求参数

1、nginx中新增配置: set $args "$args&参数名参数值"; 示例: set $args "$args&demo1cn_yaojin&demo2123123&myip$remote_addr"; location / {add_header Access-Control-Allow-Origin *;add_header Access-Contro…...

[系统] 电脑突然变卡 / 电脑突然** / 各种突发情况解决思路

今天来公司办公,开机之后发现电脑出现各种问题,死机、卡顿、点什么都加载,甚至开一个文件夹要1分钟才能打开,花了2个小时才解决,走了很多弯路,其实早点想通,5分钟就能解决问题,所以打…...

改进YOLO系列:8.添加SimAM注意力机制

添加SimAM注意力机制 1. SimAM注意力机制论文2. SimAM注意力机制原理3. SimAM注意力机制的配置3.1common.py配置3.2yolo.py配置3.3yaml文件配置1. SimAM注意力机制论文 论文题目:SimAM: A Simple, Parameter-Free Attention Module for Convolutional Neural Network…...

Go与Rust的对比与分析

Rust 和 Go 是两种现代语言,近年来获得了巨大的关注,每种语言都有自己独特的优势和权衡。在这篇文章中,我们将深入探讨 Rust 和 Go 之间的差异,重点关注性能、语言功能和其他关键因素,以帮助您针对您的开发需求做出明智…...

SpingMVC拦截器-异常处理的思路,用户体验不好的地方

1、异常处理机制 1.1 原先我们的异常都是手动的try..catch() 2、他存在着一些缺陷:这里创建了一个Demo的controller,内部有一个show方法: 3、访问内部,我要实现demoshow方法,我们来调用show1和show2的方法: 4、有一…...

【C++设计模式】用动画片《少年骇客》(Ben10)来解释策略模式

2023年8月25日&#xff0c;周五上午 今天上午学习设计模式中的策略模式时&#xff0c;发现这个有点像很多卡通片里面的变身器... #include<iostream>//alien hero是外星英雄的意思 //在《少年骇客》中&#xff0c;主角可以通过变身器变成10种外星英雄 class AlienHero{ …...

软件测试及数据分析处理实训室建设方案

一 、系统概述 软件测试及数据分析处理是软件开发过程中的一项重要测试活动&#xff0c;旨在验证不同软件模块或组件之间的集成与交互是否正常。综合测试确保各个模块按照设计要求正确地协同工作&#xff0c;以实现整个软件系统的功能和性能。以下是软件测试及数据分析处理的一…...

切换Debian的crontab的nano编辑器

Debian的crontab默认的编辑器是nano&#xff0c;用起来很不习惯,怎么才能转回vim呢? 用以下命令便可&#xff1a; #update-alternatives --config editor 出现以下所示的界面&#xff1a; 而后选择8使用/usr/bin/vim就能够了。 PS&#xff1a;若是你发现你的定时没有生效&…...

Spring Cloud Alibaba-Sentinel--服务容错

1 高并发带来的问题 在微服务架构中&#xff0c;我们将业务拆分成一个个的服务&#xff0c;服务与服务之间可以相互调用&#xff0c;但是由于网络 原因或者自身的原因&#xff0c;服务并不能保证服务的100%可用&#xff0c;如果单个服务出现问题&#xff0c;调用这个服务就会出…...

Stable Diffusion 系列教程 | 如何获得更高清优质的AI绘画

目录 1 高清修复 1.1 原理 1.2 基本操作 1.3 优缺点 2 UpScale 放大脚本 2.1 原理 2.2 基本操作 2.3 优缺点 3 附加功能放大 3.1 原理 3.2 基本操作 3.3 优缺点 优化出图质量&#xff0c;产出更高清&#xff0c;分辨率更高&#xff0c;更有细节的绘画作品呢&#x…...

食品饮料制造行业如何实现数字化转型和工业4.0

随着科技的不断进步和全球产业的不断发展&#xff0c;食品饮料制造行业也正迎来数字化转型和工业4.0的浪潮。这一转型不仅提升了生产效率和质量&#xff0c;还满足了消费者对更健康、更可持续产品的需求。本文将深入探讨食品饮料制造行业在数字化转型和工业4.0方面的趋势、挑战…...

UE学习记录03----UE5.2 使用MVVM示例

1.打开ue5.2新建C项目 2.项目中通过类导向新建C类&#xff0c;父类选择为UMVVMViewModelBase&#xff0c;创建完成会自动打开vs 3.在VS中对新建的类进行宏定义 使用 C 类向导 创建的类声明自动通过 UCLASS() 宏进行处理。 UCLASS() 宏使得引擎意识到这个类的存在&#xff0c;并…...

代码审计-审计工具介绍-DAST+SAST+IAST项目

DASTSASTIAST项目介绍 DAST&#xff1a; 动态应用程序安全测试&#xff08;Dynamic Application Security Testing&#xff09;技术在测试或运行阶段分析应用程序的动态运行状态。它模拟黑客行为对应用程序进行动态攻击&#xff0c;分析应用程序的反应&#xff0c;从而确定该We…...

网络安全应急响应预案培训

应急响应预案的培训是为了更好地应对网络突发状况&#xff0c;实施演 练计划所做的每一项工作&#xff0c;其培训过程主要针对应急预案涉及的相 关内容进行培训学习。做好应急预案的培训工作能使各级人员明确 自身职责&#xff0c;是做好应急响应工作的基础与前提。应急响应…...

STM32F4X 定时器中断

STM32F4X 定时器中断 什么是定时器STM32F4X 定时器分类有关定时器的概念预分频(PSC)自动重装载值(ARR) STM32F4X定时器例程定时器相关函数定时器例程 什么是定时器 定时器(Timer)最基本的功能就是定时&#xff0c;比如定时翻转LED灯&#xff0c;定时向串口发送数据等。除此之外…...

MongoDB +Dataframe+excel透视表

读取MongoDB中的表 from pymongo import MongoClient import pandas as pd client MongoClient(IP地址, 27017)db client[AOI] collection db[表名] #替换为实际的名称 document collection.find({time:{$gte:2023-08-15 15:26:06}})#筛选数据 df pd.DataFrame(list(docu…...

PostgreSQL日期相关

PostgreSQL日期相关 PostgreSQL日期相减得到整数 PostgreSQL日期相减得到整数 天数相减得到整数&#xff0c;执行下面的SQL&#xff1a; select to_number(date_trunc(day,2023-08-18 00:00:00::TIMESTAMP - 2023-08-10 00:00:00::TIMESTAMP INTERVAL 1 day)::text, 9999999…...

C++编程法则365天一天一条(8)const_cast去除cv限定

文章目录 1、使用场景2、关于const_cast的陷阱3、总结const_cast主要用于去除cv限定,且在C++提供的4个类型转换运算符里,只有const_cast可以去除或者添加cv属性。 1、使用场景 用法如下: const_cast< target-type >( expression ) 两个可能是多级指针且指向相同类型…...

某网站DES加密逆向分析实战

文章目录 一、抓包分析二、加密分析一、重写加密 一、抓包分析 分析站点&#xff1a; aHR0cDovL2VpcC5jaGFuZmluZS5jb20v 首先我们提交一下登陆信息&#xff1a; 搜索j_password查看加密函数: 把上图搜索到的encryptPassword函数拿出来分析一下&#xff1a; function encryptP…...

面向对象的理解

想要对象了&#xff1f;没问题&#xff0c;new一个就好了。 但是&#xff0c;new太多对象&#xff0c;对象也会生气的哦。 你瞧&#xff0c;她来了 从两段代码发现端倪 我们来计算一个矩形的面积&#xff0c;看看这两段代码有什么区别呢&#xff1f; 第一段&#xff1a; con…...

java ssl加密发送邮件

通过25端口发送邮件不安全&#xff0c;改为ssl加密方式发送邮件&#xff0c;比较常见的2中实现类发送邮件如下所示。 1、JavaMailSenderImpl 类 使用该实现类发送邮件&#xff0c;ssl加密使用端口号为465&#xff0c;借助Properties类设置ssl的各种配置。 SysUserEntity user…...

SpringBoot-yml配置文件的使用与优势

目录 一、什么是yml配置文件&#xff1f; 二、如何在SpringBoot中使用yml配置文件&#xff1f; 三、如何在SpringBoot中注入yml配置文件的属性&#xff1f; Value注解 ConfigurationProperties注解 四、yml配置文件与properties配置文件的区别和优势 区别 优势 五、总结…...

Layer Normalization(层规范化)

详细内容在这篇论文&#xff1a;Layer Normalization 训练深度神经网络需要大量的计算&#xff0c;减少计算时间的一个有效方法是规范化神经元的活动&#xff0c;例如批量规范化BN&#xff08;batch normalization&#xff09;技术&#xff0c;然而&#xff0c;批量规范化对小批…...

redisson参数配置

文章目录 pom配置链接配置建议 pom <!-- 引入spring-data-redis组件 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusions><!-- 因springboot2.x…...

【基于Arduino的仿生蚂蚁机器人】

【基于Arduino的仿生蚂蚁机器人】 1. 概述2. Arduino六足位移台–蚂蚁机器人3D模型3. 3D 打印零件4. 组装Arduino六足位移台5. Arduino蚂蚁机器人电路图6. 为Arduino Hexapod设计PCB7. 组装电路板8. 系统代码9. Arduino蚂蚁机器人安卓应用程序在本教程中,我将向您展示如何构建…...

angular12里面FormGroup做多个项目的相关check

FromFroup在鼠标失去焦点时做相关check&#xff0c;可以在group方法第二个参数的位置加一个对象参数 { validator: this.checkPasswords } 在Angular 12中&#xff0c;可以使用formGroup来进行两个密码是否一致的检查。以下是一个示例&#xff1a; 首先&#xff0c;在组件的…...

TypeScript 的发展与基本语法

目录 一、为什么什么是TypeScript&#xff1f; 1、发展历史 2、typescript与javascript 3、静态类型的好处 二、基础语法 1、基础数据类型 2、补充类型 3、泛型 4、泛型的高级语法 5、类型别名&类型断言 6、字符串/数字 字面量 三、高级类型 1、联合/交叉类型…...

macOS - 上编译运行 risc-v (spike)

文章目录 一、说明二、安装步骤三、测试 一、说明 本文根据以下文章改编&#xff1a; RISC-V 环境配置 https://decaf-lang.github.io/minidecaf-tutorial/docs/step0/riscv_env.html 相关链接&#xff1a; riscv-gnu-toolchain GNU toolchain for RISC-V, including GCC ht…...

Linux--线程地址空间

1.程序地址空间 先来就看这张图 这是一张程序地址分布的图&#xff0c;通过一段代码来证明地址空间的分布情况 编译结果&#xff1a; 可以看出的是&#xff0c;父子进程中对于同一个变量打印的地址是一样的&#xff0c;这是因为子进程以父进程为模板&#xff0c;因为都没有对数…...

做图书出版 外国网站/站长工具的网址

/********************************************************************************** Linux不在显示器上方总是显示企鹅* 说明&#xff1a;* 默认情况下&#xff0c;是会一直显示企鹅的。** 2018-2…...

阳泉做网站/semaphore

许多Visual Studio下的程序员&#xff0c;甚至一些很有经验的开发人员&#xff0c;都不知道这些技巧。希望这篇文章能帮你掌握这些技巧。它们都很简单&#xff0c;却能帮你节约大量的时间。 一、跳到当前光标处&#xff08;CtrlF10&#xff09; 我经常看到人们为了到达目标代码…...

东莞网站优化什么方法/百度网站链接

Atitit 面向对象弊端与问题 坏处 缺点 1.1. 状态fsm&#xff0c;反模块化&#xff0c;又是反并行的&#xff0c;这是它的非常固有的特征&#xff0c; 1 1.2. 现时的OOP编程有可能不缓存友好&#xff08;cache friendly&#xff09;&#xff0c; 1 1.3. 面向对象是一个很重量级的…...

个人申请开网店怎么注册/专业搜索引擎seo技术公司

近日&#xff0c;一名印度工程师所写的《令人忧虑&#xff0c;不阅读的中国人》红遍网络。他说&#xff0c;未来的中国前途堪忧&#xff01;全文如下&#xff08;编者&#xff1a;从文中叙述看&#xff0c;有些表达不太像是出自一名印度工程师之口&#xff0c;不过道理是一样的…...

成都网站建设开发公司哪家好/营销软文范文200字

引入命名空间 using System.Diagnostics; 具体方法实现 1 class Cmd2 {3 private static string CmdPath "C:\Windows\System32\cmd.exe";4 /// <summary>5 /// 执行cmd命令 返回cmd窗口显示的信息6 /// 多命令请使用批处理命令连接符&#x…...

成都网站设计费用/知识营销

题目: 判断一个链表是否为回文结构。如果链表长度为N&#xff0c;时间复杂度为O(N)&#xff0c;空间复杂度为O(1) 分析&#xff1a; 方法1&#xff1a;使用栈&#xff0c;需要O(N)的额外空间 1.将链表中节点的值全部存入栈中&#xff0c; 2.根据栈先进后出的特性&#xff0c;和…...