RabbitMQ工作模式——Routing路由模式

news2024/11/25 11:53:54

1.Routing路由模式

在这里插入图片描述
Routing生产者代码

public class Producer_Routing {
	public static void main(String[] args) throws IOException, TimeoutException {
		//1.创建连接工厂
		ConnectionFactory factory = new ConnectionFactory();
		//2.设置参数
		factory.setHost("172.16.98.133"); ip 默认值 localhost
		factory.setPort(5672);//端口 默认值5672
		factory.setVirtualHost("/itcast");//虚拟机 默认值
		factory.setUsername("heima");//用户名 默认guest
		factory.setPassword("heima");//密码 默认值 guest
		//3.创建连接 Connection
		Connection connection = factory.newConnection();
		//4.创建Channel
		Channel channel = connection.creatChannel();
		/*
		exchange(String exchange,String type,boolean durable,boolean autoDelete,boolean internal,Map<String,Object> arguments)
		参数:
		1.exchange:交换机名称
		2.type:交换机类型
			DIRECT("direct"),:定向
			FANOUT("fanout"),:扇形(广播)发送消息到每一个与之绑定的队列
			TOPIC("topic"),:通配符方式
			HEADERS("headers");:参数匹配
		3.durable:是否持久化
		4.autoDelete:自动删除
		5.internal:内部使用。一般为false
		6.arguments:参数,一般设为null
		*/
		//5.创建交换机
		String exchangeName = "test_direct";
		channel.exchangeDeclare(exchangeName,BuiltinExchangeType.DIRECT,true,false,false,null);
		//6.创建队列
		String queue1Name = "test_direct_queue1";
		String queue2Name = "test_direct_queue2";
		channel.queueDeclare(queue1Name,true,false,false,null);
		channel.queueDeclare(queue2Name,true,false,false,null);
		//7.绑定队列和交换机
		/*
		queueBind(String queue,String exchange,String routingKey)
		参数:
			1.queue:队列名称
			2.exchange:交换机名称
			3.routingKey:路由键,绑定规则
				如果交换机的类型为:fanout,routingKey设置为空字符串
		*/
		//队列1的绑定 error
		channel.queueBind(queue1Name,exchangeName,"error");
		//队列2的绑定 info error warning
		channel.queueBind(queue2Name,exchangeName,"info");
		channel.queueBind(queue2Name,exchangeName,"error");
		channel.queueBind(queue2Name,exchangeName,"warning");
		//8.发送消息
		String body = "日志信息,张三调用了findAll方法...日志级别:info...";	
		channel.basicPublish(exchangeName,"info",null,body.getBytes());
		//9.释放资源
		channel.close();
		connection.close();
	}
}

Routing1消费者代码

public class Consumer_Routing1 {
	public static void main(String[] args) throws IOException, TimeoutException {
		//1.创建连接工厂
		ConnectionFactory factory = new ConnectionFactory();
		//2.设置参数
		factory.setHost("172.16.98.133"); ip 默认值 localhost
		factory.setPort(5672);//端口 默认值5672
		factory.setVirtualHost("/itcast");//虚拟机 默认值
		factory.setUsername("heima");//用户名 默认guest
		factory.setPassword("heima");//密码 默认值 guest
		//3.创建连接 Connection
		Connection connection = factory.newConnection();
		//4.创建Channel
		Channel channel = connection.creatChannel();
		
		String queue1Name = "test_direct_queue1";
		String queue2Name = "test_direct_queue2";
		
		/*
			basicConsume(String queue,boolean autoAck,Consumer callback)
			参数:
			1.queue:队列名称
			2.autoAck:是否自动确认
			3.callback:回调对象
		*/
		//接收消息
		Consumer consumer = new DefaultConsumer(channel){
			/*
				回调方法,当收到消息后会自动执行该方法
				1.consumerTag:标识
				2.envelope:获取一些信息,交换机,路由key...
				3.properties:配置信息
				4.body:数据
			*/
			@Override
			public void handleDelivery(String consumerTag,Envelope envelope,AMQP.BasicProperties properties,byte[] body){
				System.out.println("consumerTag" + consumerTag);
				System.out.println("Exchange" + envelope.getExchange());
				System.out.println("RoutingKey" + envelope.getRoutingKey());
				System.out.println("properties" + properties);
				System.out.println("body" + new String(body));
				System.out.println("将日志信息存储到数据库......");
			}
		};
		channel.basicConsume("queue2Name",true,consumer);

		//消费者不能关闭资源
	}
}

Routing2消费者代码

public class Consumer_Routing2 {
	public static void main(String[] args) throws IOException, TimeoutException {
		//1.创建连接工厂
		ConnectionFactory factory = new ConnectionFactory();
		//2.设置参数
		factory.setHost("172.16.98.133"); ip 默认值 localhost
		factory.setPort(5672);//端口 默认值5672
		factory.setVirtualHost("/itcast");//虚拟机 默认值
		factory.setUsername("heima");//用户名 默认guest
		factory.setPassword("heima");//密码 默认值 guest
		//3.创建连接 Connection
		Connection connection = factory.newConnection();
		//4.创建Channel
		Channel channel = connection.creatChannel();
		
		String queue1Name = "test_direct_queue1";
		String queue2Name = "test_direct_queue2";
		
		/*
			basicConsume(String queue,boolean autoAck,Consumer callback)
			参数:
			1.queue:队列名称
			2.autoAck:是否自动确认
			3.callback:回调对象
		*/
		//接收消息
		Consumer consumer = new DefaultConsumer(channel){
			/*
				回调方法,当收到消息后会自动执行该方法
				1.consumerTag:标识
				2.envelope:获取一些信息,交换机,路由key...
				3.properties:配置信息
				4.body:数据
			*/
			@Override
			public void handleDelivery(String consumerTag,Envelope envelope,AMQP.BasicProperties properties,byte[] body){
				System.out.println("consumerTag" + consumerTag);
				System.out.println("Exchange" + envelope.getExchange());
				System.out.println("RoutingKey" + envelope.getRoutingKey());
				System.out.println("properties" + properties);
				System.out.println("body" + new String(body));
				System.out.println("将日志信息打印到控制台......");
			}
		};
		channel.basicConsume("queue1Name",true,consumer);

		//消费者不能关闭资源
	}
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文彻底搞懂PN结及其单向导电性(图解说明)

前置知识 首先我们要知道纯净的本征半导体 硅 的导电性是非常差的&#xff0c;所以我们一般都会向纯净硅中添加杂质&#xff0c;也就是P型半导体和N型半导体。P型半导体和N型半导体都是呈电中性的&#xff0c;对于N型半导体而言&#xff0c;它又多数载流子电子和带正电荷的N离子…

【LeetCode-中等题】113. 路径总和 II

文章目录 题目方法一&#xff1a;DFS回溯 题目 方法一&#xff1a;DFS回溯 解题核心 就是要知道递归在哪里结束 &#xff0c;收货结果在哪里收获&#xff0c;哪些变量需要回溯&#xff0c;哪些不需要回溯 class Solution {List<List<Integer>> res new ArrayLis…

BI技巧丨Window应用之累计求和

Window函数除了可以用来计算同环比、移动平均之外&#xff0c;还可以用来处理累计求和问题。 核心在于Window的from和to参数的设定&#xff0c;可以将其设置为绝对位置和相对位置。 先来看看本期的案例数据&#xff1a; 案例数据比较简单&#xff0c;一张销售事实表。 将其导…

C++核心编程——P45-52继承

继承 继承是面向对象三大特性之一 有些类与类之间存在特殊的关系&#xff0c;例如下图中: 我们发现&#xff0c;定义这些类的时候&#xff0c;下级别的成员除了拥有上一级的共性&#xff0c;还有自己的特性。 这时候我们就可以考虑利用继承的技术&#xff0c;减少重复代码量…

PPPoE配置

实验需求 配置IP地址使用PPPOE拨号上网设置路由让直播业务部和营销部都可以访问外网 实验拓扑 实验步骤 配置 R1地址池 电信链路&#xff1a; [Huawei]undo info-center enable Info: Information center is disabled. [Huawei]sysname r1 [r1]ip pool zhibo  //配置…

多进程编程- POSIX命名信号量(named semaphore)

POSIX命名信号量是POSIX标准下的一个进程间同步原语&#xff0c;允许多个进程共享同一个信号量&#xff0c;从而实现进程间的同步和通信。这与无名信号量不同&#xff0c;无名信号量主要用于线程之间的同步&#xff0c;而不是进程之间。 命名信号量是“命名”的&#xff0c;因…

基于AVR128单片机抢答器控制系统

一、系统方案 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计 1、首先是系统初始化 uchar set_time 0 ; DDRA0XFF; PORTA0xff; DDRB0XFF; PORTB0x00; DDRC0X00; PORTC0xff; DDRD0XFc; PORTD0XFF; DDRE0XFF; PORTE0XFF; DDRF0XFF; PORTF0XF0; beer1(); timer1_i…

Linux-多路转接-select/poll

select/poll 五种IO模型对IO的正确理解何为高效的IO阻塞IO非阻塞IO设置文件描述符为非阻塞模式非阻塞IO例子 信号驱动IO异步IO多路转接 selct认识接口select返回值 基本使用select使用特点缺点 poll认识接口对select的改善缺点 五种IO模型 对IO的正确理解 &#x1f680;IO不仅…

MySQL学习笔记9

MySQL数据表中的数据类型&#xff1a; 在考虑数据类型、长度、标度和精度时&#xff0c;一定要仔细地进行短期和长远的规划&#xff0c;另外&#xff0c;公司制度和希望用户用什么方式访问数据也是要考虑的因素。开发人员应该了解数据的本质&#xff0c;以及数据在数据库里是如…

Sentinel故障转移及实现原理

Sentinel故障转移及实现原理 一、哨兵模式的基本工作流程二、判断实例下线三、选举新主库四、哨兵模式弊端五、哨兵集群判断实例下线六、哨兵集群判断实例下线详细工作过程七、哨兵集群的通信八、哨兵和客户端的通信九、总结 一、哨兵模式的基本工作流程 redis在运行时会开启一…

vue基础知识十五:说说你对slot的理解?slot使用场景有哪些?

一、slot是什么 在HTML中 slot 元素 &#xff0c;作为 Web Components 技术套件的一部分&#xff0c;是Web组件内的一个占位符 该占位符可以在后期使用自己的标记语言填充 举个栗子 <template id"element-details-template"><slot name"element-na…

(2022|ECCV,图像分割,VQ-SEG,AR Transformer)Make-A-Scene:利用人类先验进行基于场景的文本到图像生成

Make-A-Scene: Scene-Based Text-to-Image Generation with Human Priors 公众号&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 或直接进 Q 交流群&#xff1a;922230617 获取资料&#xff09; 目录 0. 摘要 1. 简介 2.相关工作 2.1. 图像生成 2.2. 图像标…

2023年汉字小达人区级自由报名明天开赛,3个新问题和往年真题练一练

明天9月25日&#xff0c;备受关注的2023年第十届上海小学生汉字小达人区级自由报名的比赛就要开始了&#xff0c;最近还是有几个“小迷糊”家长刚听说这个活动&#xff0c;问了几个问题&#xff0c;我觉得挺有普遍性的&#xff0c;所以再次给大家回答一下&#xff0c;希望能够帮…

redis漏洞修复:CVE-2022-35977、CVE-2023-22458、CVE-2023-28856

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、漏洞内容二、现状三、更新redis下载镜像停止已有的容器启动新的容器 四、更新后的版本1. 查看日志2. 查看版本 总结 前言 漏扫发现机器上的redis版本有点低…

图像识别-YOLO V8安装部署-window-CPU-Pycharm

前言 安装过程中发现&#xff0c;YOLO V8一直在更新&#xff0c;现在是2023-9-20的版本&#xff0c;已经和1月份刚发布的不一样了。 eg: 目录已经变了&#xff0c;旧版预测:在ultralytics/yolo/v8/下detect 新版&#xff1a;ultralytics/models/yolo/detect/predict.py 1.安…

九、多项式朴素贝叶斯算法(Multinomial NB,Multinomial Naive Bayes)(有监督学习)

Multinomial Naive Bayes&#xff1a;用于多项式模型的Naive Bayes分类器 一、算法思路 多项式Naive Bayes分类器适用于离散特征分类&#xff08;如文本分类中的字数&#xff09; 多叉分布通常需要整数特征计数 不过&#xff0c;在实际应用中&#xff0c;分数计数&#xff08…

LeetCode刷题

一 【移除元素】 原题链接&#xff1a;27. 移除元素 - 力扣&#xff08;LeetCode&#xff09; 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用…

SLAM从入门到精通(机器人建模和仿真环境)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 很多同学学了ros&#xff0c;以为把publish、subscribe、消息、服务这些接口学好了就行。其实这是很大的误区。因为这些通信机制只是帮我们了解ros…

bean加载properties文件(spring)

1.开启Context命名空间 复制一下第二行的信息,然后粘贴一下,把粘贴过来的所有beans替换成context 2.使用context命名空间,加载指定的properties文件 3,使用#{}占位符读取加载的属性值 实际实例(在配置文件xml中写) 补充: 不加载系统属性的解释: 如果你在配置文件中配置的变量…

MyBatis友人帐之缓存

一、概述 1.1简介 什么是缓存 [ Cache ]&#xff1f; 存在内存中的临时数据。 将用户经常查询的数据放在缓存&#xff08;内存&#xff09;中&#xff0c;用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询&#xff0c;从缓存中查询&#xff0c;从而提高查询效率&…