欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > RabbitMQ的发布订阅模式

RabbitMQ的发布订阅模式

2025/5/5 18:05:35 来源:https://blog.csdn.net/Z0412_J0103/article/details/143354922  浏览:    关键词:RabbitMQ的发布订阅模式

发布订阅模式

image-20230810180012118

是群发的概念,每条消息可以发送给多个消费者

在订阅模型中,多了一个 Exchange 角色

Exchange:交换机(X)。一方面,接收生产者发送的消息。另一方面,知道如何处理消息,例如递交给某个特别队列、 递交给所有队列、或是将消息丢弃。到底如何操作,取决于Exchange的类型。Exchange有常见以下3种类型:

  1. Fanout:广播,将消息交给所有绑定到交换机的队列

  2. Direct:定向,把消息交给符合指定routing key 的队列

  3. Topic:通配符,把消息交给符合routing pattern(路由模式) 的队列

    Exchange(交换机)只负责转发消息,不具备存储消息的能力,因此如果没有任何队列与 Exchange 绑定,或者没有符合 路由规则的队列,那么消息会丢失

Exchange和Queue之间还需要绑定才能发送消息

生产者代码
public class PSProducer {public static void main(String[] args) throws Exception {//创建连接ConnectionFactory cf = new ConnectionFactory();cf.setHost("192.168.64.140");ccf.setPort(5672);//可选,5672是默认端口f.setUsername("guest");cf.setPassword("guest");Connection nc = cf.newConnection();Channel cc = nc.createChannel();//定义交换机//服务器中如果没有交换机,就创建,有就直接使用cc.exccangeDeclare("logs", "fanout");//向交换机发送数据while(true) {System.out.print("输入:");String s = new Scanner(System.in).nextLine();cc.basicPublish("logs", "", null, s.getBytes());}}
}
消费者代码
public class PSConsumer {public static void main(String[] args) throws Exception {//创建连接ConnectionFactory cf = new ConnectionFactory();cf.setHost("192.168.64.140");ccf.setPort(5672);//可选,5672是默认端口f.setUsername("guest");cf.setPassword("guest");Connection nc = cf.newConnection();Channel cc = nc.createChannel();//定义交换机//服务器中如果没有交换机,就创建,有就直接使用cc.exccangeDeclare("logs", "fanout");//cc.queueDeclare(UUID.randomUUID().toString(), false, true, true, null);String queue = cc.queueDeclare().getQueue();cc.queueBind(queue, "logs", "");//处理数据DeliverCallback deliverCallback = new DeliverCallback() {@Overridepublic void handle(String consumerTag, Delivery message) throws IOException {byte[] a = message.getBody();String b = new String(a);System.out.println("收到:"+b);System.out.println("消息处理完毕");}};CancelCallback cancelCallback = new CancelCallback() {@Overridepublic void handle(String consumerTag) throws IOException {}};//3.接收数据/**第二个参数:*         true:自动确认*         false:手动确认*/cc.basicConsume(queue,true, deliverCallback, cancelCallback);}
}

上一篇文章:RabbitMQ的工作模式-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/Z0412_J0103/article/details/143354823下一篇文章: 

版权声明:

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

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

热搜词