RabbitMQ消息模型之Fanout消息模型

Fanout消息模型

* 广播模型:*  一个交换机绑定多个队列*  每个队列都有一个消费者*  每个消费者消费自己队列中的消息,每个队列的信息是一样的
生产者
package com.example.demo02.mq.fanout;import com.example.demo02.mq.util.ConnectionUtils;
import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;import java.io.IOException;/*** @author Allen* 4/11/2024 8:24 AM* @version 1.0* @description: 广播模型发送者** 广播模型:*  一个交换机绑定多个队列*  每个队列都有一个消费者*  每个消费者消费自己队列中的消息,每个队列的信息是一样的*/
public class FanoutSender {public static void main(String[] args) throws Exception {// 1:获取连接Connection connection = ConnectionUtils.getConnection();// 2:创建通道Channel channel = connection.createChannel();// 3:声明交换机// 参数1:交换机名称 参数2:交换机类型 (fanout direct topic) 参数3:是否持久化/*fanout:广播模式绑定了这个交换机的队列都会收到消息direct:路由模式通过路由键完全匹配的队列会收到消息topic:通配符模式通过通配符匹配的队列会收到消息*/channel.exchangeDeclare("fanout.exchange", BuiltinExchangeType.FANOUT,false);// 交换机不会存储消息,只是负责消息的转发,如果没有队列绑定到交换机上,消息会丢失// 4:发送消息到交换机:需要消费信息的消费者自己声明自己的队列绑定到当前交换机上String msg = "fanout message";channel.basicPublish("fanout.exchange", "", null, msg.getBytes());// 5:关闭通道channel.close();// 6:关闭连接connection.close();}
}
消费者1
package com.example.demo02.mq.fanout;import com.example.demo02.mq.util.ConnectionUtils;
import com.rabbitmq.client.*;import java.io.IOException;/*** @author Allen* 4/11/2024 8:55 AM* @version 1.0* @description: 广播模型接收者*/
public class FanoutReceiver1 {public static void main(String[] args) throws Exception {// 1:获取连接Connection connection = ConnectionUtils.getConnection();// 2:创建通道Channel channel = connection.createChannel();// 3:声明交换机//为什么消费者也得声明交换机?如果消费者先启动,那么交换机还没有声明,消费者就会报错,所以消费者也得声明交换机// 参数1:交换机名称 参数2:交换机类型 参数3:是否持久化channel.exchangeDeclare("fanout.exchange", BuiltinExchangeType.FANOUT,false);// 4:声明队列// 参数1:队列名称 参数2:是否持久化 参数3:是否排他性 参数4:是否自动删除 参数5:其他参数channel.queueDeclare("fanout.queue1", false, false, false, null);// 5:绑定自己的队列到交换机channel.queueBind("fanout.queue1", "fanout.exchange", "");// 6:消费消息Consumer consumer = new DefaultConsumer(channel){@Override// 参数1:消费者标签 参数2:消息传递参数 参数3: 参数4:消息内容public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {// 消费消息System.out.println("Fanout1接收到的消息是:" + new String(body));// 手动确认消息channel.basicAck(envelope.getDeliveryTag(),false);}};channel.basicConsume("fanout.queue1",false,consumer);}
}
消费者2
package com.example.demo02.mq.fanout;import com.example.demo02.mq.util.ConnectionUtils;
import com.rabbitmq.client.*;import java.io.IOException;/*** @author Allen* 4/11/2024 8:55 AM* @version 1.0* @description: 广播模型接收者*/
public class FanoutReceiver2 {public static void main(String[] args) throws Exception {// 1:获取连接Connection connection = ConnectionUtils.getConnection();// 2:创建通道Channel channel = connection.createChannel();// 3:声明交换机//为什么消费者也得声明交换机?如果消费者先启动,那么交换机还没有声明,消费者就会报错,所以消费者也得声明交换机channel.exchangeDeclare("fanout.exchange", BuiltinExchangeType.FANOUT,false);// 4:声明队列// 参数1:队列名称 参数2:是否持久化 参数3:是否排他性 参数4:是否自动删除 参数5:其他参数channel.queueDeclare("fanout.queue2", false, false, false, null);// 5:绑定队列到交换机channel.queueBind("fanout.queue2", "fanout.exchange", "");// 6:消费消息Consumer consumer = new DefaultConsumer(channel){@Override// 参数1:消费者标签 参数2:消息传递参数 参数3: 参数4:消息内容public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {// 消费消息System.out.println("Fanout2接收到的消息是:" + new String(body));// 手动确认消息channel.basicAck(envelope.getDeliveryTag(),false);}};channel.basicConsume("fanout.queue2",false,consumer);}
}
结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/306307.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python异常处理try与except跳过报错使得程序继续运行的方法

本文介绍基于Python语言的异常处理模块try与except,对代码中出现的报错加以跳过,从而使得程序继续运行的方法。 在Python语言中,try语句块用于包含可能引发异常的代码,而except语句块则用于定义在出现异常时要执行的代码。其基本结…

Windows下编译boost库

官网:https://www.boost.org/ 下载地址:https://github.com/boostorg/boost 这里使用github下载 使用git bash运行bootstrap.sh 运行b2.exe,会生成bin.v2和stage文件夹 Cmake引入

03-JAVA设计模式-适配器模式

适配器模式 设么是适配器模式 它属于结构型模式,主要用于将一个类的接口转换成客户端所期望的另一种接口,从而使得原本由于接口不兼容而无法协同工作的类能够一起工作。 适配器模式主要解决的是不兼容接口的问题。在软件开发中,经常会有这…

前端对接fastGPT流式数据+打字机效果

首先在对接api时 参数要设置stream: true, const data {chatId: abc,stream: true,//这里true返回流式数据detail: false,variables: {uid: sfdsdf,name: zhaoyunyao,},messages: [{ content: text, role: user }]}; 不要用axios发请求 不然处理不了流式数据 我这里使用fetch …

通过Transform与Animation,来探索CSS中的动态视觉效果

在 transform 和 animation 出现之前,前端开发者通常需要编写大量的 JavaScript 代码来实现动态效果。然而,这两个 CSS 属性的引入极大地简化了丰富动效和过渡效果的实现,从而让用户界面更加引人入胜,交互体验更为流畅。本文将深入…

详解Qt添加外部库

在Qt项目中添加外部库是一项常见任务,无论是静态库还是动态库都需要正确的配置才能让项目顺利编译链接。以下是详细步骤和不同场景下的配置方法: 方法一:手动编辑.pro文件 添加头文件路径: 在Qt项目中的.pro文件中使用INCLUDEPAT…

小程序解析二维码:jsQR

1.了解jsQR jsQR是一个纯javascript脚本实现的二维码识别库&#xff0c;不仅可以在浏览器端使用&#xff0c;而且支持后端node.js环境。jsQR使用较为简单&#xff0c;有着不错的识别率。 2.效果图 3.二维码 4.下载jsqr包 npm i -d jsqr5.代码 <!-- index.wxml --> &l…

通讯录项目(用c语言实现)

一.什么是通讯录 通讯录是一种用于存储联系人信息的工具或应用程序。它是一种电子化的地址簿&#xff0c;用于记录和管理个人、机构或组织的联系方式&#xff0c;如姓名、电话号码、电子邮件地址和邮寄地址等。通讯录的目的是方便用户在需要时查找和联系他人。 通讯录通常以列…

AI预测体彩排3第1弹【2024年4月12日预测--第1套算法开始计算第1次测试】

前面经过多个模型几十次对福彩3D的预测&#xff0c;积累了一定的经验&#xff0c;摸索了一些稳定的规律&#xff0c;有很多彩友让我也出一下排列3的预测结果&#xff0c;我认为目前时机已成熟&#xff0c;且由于福彩3D和体彩排列3的玩法完全一样&#xff0c;我认为3D的规律和模…

Zookeeper的集群搭建和ZAB协议详解

Zookeeper的集群搭建 1&#xff09;zk集群中的角色 Zookeeper集群中的节点有三个角色&#xff1a; Leader&#xff1a;处理集群的所有事务请求&#xff0c;集群中只有一个LeaderFollwoer&#xff1a;只能处理读请求&#xff0c;参与Leader选举Observer&#xff1a;只能处理读…

vscode 连接远程服务器 服务器无法上网 离线配置 .vscode-server

离线配置 vscode 连接远程服务器 .vscode-server 1. .vscode-server下载 使用vscode连接远程服务器时会自动下载配置.vscode-server文件夹&#xff0c;如果远程服务器无法联网&#xff0c;则需要手动下载 1&#xff09;网址&#xff1a;https://update.code.visualstudio.com…

MVVM架构模式

目录 MVVM 数据绑定方式 实现方式 Model View ViewModel 数据绑定方式 vue&#xff1a;&#xff1a; 数据劫持和发布-订阅模式&#xff1a; Object.defineProperty() 方法来劫持&#xff08;监控&#xff09;各属性的 getter 、setter &#xff0c;并在数据&#xff08;对…

[大模型]Qwen1.5-4B-Chat WebDemo 部署

Qwen1.5-4B-Chat WebDemo 部署 Qwen1.5 介绍 Qwen1.5 是 Qwen2 的测试版&#xff0c;Qwen1.5 是基于 transformer 的 decoder-only 语言模型&#xff0c;已在大量数据上进行了预训练。与之前发布的 Qwen 相比&#xff0c;Qwen1.5 的改进包括 6 种模型大小&#xff0c;包括 0.…

【论文精读】 GPT,GPT-2,GPT-3:大力出奇迹

系列文章目录 【论文精读】Transformer&#xff1a;Attention Is All You Need 【论文精读】BERT&#xff1a;Pre-training of Deep Bidirectional Transformers for Language Understanding 文章目录 系列文章目录一、前言二、GPT&#xff08;一&#xff09;文章概览&#xf…

用Python编写GUI程序将JPEG文件按文件名顺序插入PDF文件

在Python编程中&#xff0c;处理文件和图像是常见的任务之一。最近&#xff0c;我遇到了一个有趣的问题&#xff1a;如何通过编写一个GUI程序来将一个文件夹中的JPEG文件按文件名顺序插入到一个新的PDF文件中&#xff1f;在这篇博客中&#xff0c;我将分享我使用Python、wxPyth…

智能工业电脑在智慧电力中实现全程实时监控与调控

可视化编程工业电脑在化工、石油、电力等行业过程控制领域扮演着越来越重要的角色。这些基于ARM架构设计的嵌入式工业计算机凭借其高性能、低功耗以及出色的实时处理能力&#xff0c;有效提升了各行业生产过程的安全性和效率。 钡铼技术ARMxy系列采用嵌入式Linux 系统开发的产品…

从零开始写 Docker(十)---实现 mydocker logs 查看容器日志

本文为从零开始写 Docker 系列第十篇&#xff0c;实现类似 docker logs 的功能&#xff0c;使得我们能够查查看容器日志。 完整代码见&#xff1a;https://github.com/lixd/mydocker 欢迎 Star 推荐阅读以下文章对 docker 基本实现有一个大致认识&#xff1a; 核心原理&#x…

Harmony鸿蒙南向外设驱动开发-Codec

功能简介 OpenHarmony Codec HDI&#xff08;Hardware Device Interface&#xff09;驱动框架基于OpenMax实现了视频硬件编解码驱动&#xff0c;提供Codec基础能力接口给上层媒体服务调用&#xff0c;包括获取组件编解码能力、创建组件、参数设置、数据的轮转和控制、以及销毁…

关于QEMU模拟器本身以及和CXL功能模拟相关内容的学习

前言&#xff1a;在写Paper的时候&#xff0c;发现直接引用QEMU官网关于QEMU的介绍实在是一个图省事儿的方法&#xff0c;但是并不可取。即使是一小段&#xff0c;也要去真正了解QEMU的基本原理&#xff0c;如何实现功能模拟&#xff0c;以及目前实现的与CXL相关的内容。 注&am…

Apache中间件漏洞

目录 什么是Apache Apache文件上传&#xff08;CVE-2017-15715&#xff09; Apache后缀解析 什么是Apache Apache(音译为阿帕奇)是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上&#xff0c;由于其跨平台和安全性被广泛使用&#xff0c;是最…