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

RabbitMQ的路由模式

路由模式

image-20230811140024317

队列与交换机的绑定,不能是任意绑定了,而是要指定一个 RoutingKey(路由key)

消息的发送方在向 Exchange 发送消息时,也必须指定消息的 RoutingKey

Exchange 不再把消息交给每一个绑定的队列,而是根据消息的 Routing Key 进行判断,只有队列的 Routingkey 与消息的 Routing key 完全一致,才会接收到消息

生产者代码
public class RouteProducer {
	public static void main(String[] args) throws Exception {
		//1.创建连接
		ConnectionFactory cf = new ConnectionFactory();
		cf.setHost("192.168.64.140");
		cf.setPort(5672);
		cf.setUsername("guest");
		cf.setPassword("guest");
		Connection nc = cf.newConnection();
	    Channel cc = nc.createChannel();
	    //2.定义交换机
	    cc.exchangeDeclare("direct_logs", BuiltinExchangeType.DIRECT);
	    //3.发送数据,携带路由键
	    while(true) {
	    	Scanner scanner = new Scanner(System.in);
	    	System.out.print("消息:");
	    	String s = scanner.nextLine();
	    	System.out.print("路由键:");
	    	String key =scanner.nextLine();	    	
	    	cc.basicPublish("direct_logs", key, null, s.getBytes())	    	
	    	System.out.println("-----------------------------------------------------");
	    }	    
	}
}
消费者代码
public class RouteConsumer {
	public static void main(String[] args) throws Exception {
		//1.创建连接
		ConnectionFactory cf = new ConnectionFactory();
		cf.setHost("192.168.64.140");
		cf.setPort(5672);
		cf.setUsername("guest");
		cf.setPassword("guest");
		Connection nc = cf.newConnection();
	    Channel cc = nc.createChannel();
	    //2.定义交换机
	    cc.exchangeDeclare("direct_logs", BuiltinExchangeType.DIRECT);
	    /3.定义队列
		String queue = cc.queueDeclare().getQueue();
		//4.绑定队列和交换机(重复绑定多次)
		System.out.print("输入绑定键,用空格隔开:");
		String s = new Scanner(System.in).nextLine();//aaa bbb  ccc
		String[] a = s.split("\\s+");
		for (String key : a) {
			ch.queueBind(queue, "direct_logs", key);
		}
		
		//5.处理数据
		DeliverCallback deliverCallback = new DeliverCallback() {
			
			@Override
			public void handle(String consumerTag, Delivery message) throws IOException {
				//从message中取出消息和路由键
				String s=new String(message.getBody());
				String key = message.getEnvelope().getRoutingKey();
				System.out.println(s+"--"+key);
				System.out.println("=======================================");
			}
		};
		CancelCallback cancelCallback = new CancelCallback() {
			@Override
			public void handle(String consumerTag) throws IOException {
				
			}
		};
		cc.basicConsume(queue, true,deliverCallback,cancelCallback);
	}
}

上一篇文章:https://blog.csdn.net/Z0412_J0103/article/details/143354922icon-default.png?t=O83Ahttps://blog.csdn.net/Z0412_J0103/article/details/143354922下一篇文章:


http://www.kler.cn/a/376376.html

相关文章:

  • 【机器学习】回归树
  • qt QScrollArea详解
  • 软考(中级-软件设计师)计算机网络篇(1101)
  • CSS3新增盒子属性(三)
  • Java项目实战II基于Java+Spring Boot+MySQL的智能推荐的卫生健康系统(开发文档+数据库+源码)
  • 【Visual Studio】解决 CC++ 控制台程序 printf 函数输出中文和换行符显示异常
  • MySQL — 事务 (o゚▽゚)o
  • 【运动的&足球】足球运动员球守门员裁判检测系统源码&数据集全套:改进yolo11-DBBNCSPELAN
  • Django 5企业级Web应用开发实战-日志
  • 前端表格复制粘贴自动根据标识进行填充
  • Python CGI编程-cookie的设置、检索
  • Jenkins面试整理-Jenkins Pipeline 是什么?
  • 「面试必背」Linux面试题(2024最新版)
  • 【LeetCode每日一题】——LCP 07.传递信息
  • OpenCV最详细入门教程
  • linux_c++GDB环境搭建(一)
  • 计算机网络803-(5)运输层
  • 【JavaEE初阶】网络原理(5)
  • 受限玻尔兹曼机(RBM):构成 DBN 的基本单元
  • GeoSever发布图层(保姆姬)
  • 修复Android9原生bug-->无锁屏唤醒与第三方锁屏右滑解锁大概率性ui不更新
  • 如何把小程序挂载到抖音直播间
  • 解决QT打包发布App Store时(90238)错误
  • 《高频电子线路》—— 相位平衡条件判断准则
  • Spring Cloud Ribbon:负载均衡的服务调用
  • pdfkit | 利用python实现html文件转pdf