欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > RabbitMQ的路由模式

RabbitMQ的路由模式

2025/5/11 18:13:39 来源:https://blog.csdn.net/Z0412_J0103/article/details/143355002  浏览:    关键词: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  cccString[] a = s.split("\\s+");for (String key : a) {ch.queueBind(queue, "direct_logs", key);}//5.处理数据DeliverCallback deliverCallback = new DeliverCallback() {@Overridepublic 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() {@Overridepublic 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下一篇文章:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词