SpringAMQP--发布订阅模型介绍

发布/订阅模型在消息队列中引入了交换机(Exchange)的角色,生产者不再直接将消息发送到队列,而是通过Exchange。Exchange根据预设的类型(如Fanout、Direct、Topic)和路由规则决定将消息转发至哪些队列。如果无匹配队列,消息将丢失。这种模型提供了更灵活的消息路由策略。
摘要由CSDN通过智能技术生成

发布/订阅

 

发布订阅的模型如图:

可以看到,在订阅模型中,多了一个exchange角色,而且过程略有变化:

  • Publisher:生产者,也就是要发送消息的程序,但是不再发送到队列中,而是发给X(交换机)

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

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

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

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

  • Consumer:消费者,与以前一样,订阅队列,没有变化

  • Queue:消息队列也与以前一样,接收消息、缓存消息。

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

Spring AMQP是一个基于Spring框架的消息队列集成库,它支持多种消息中间件,如RabbitMQ、Apache Qpid等。如果你想在Spring AMQP中获取一个随机的队列名,通常你需要手动创建并管理这些队列,因为Spring AMQP不会自动为你生成随机队列。 你可以通过以下步骤在配置文件或代码中创建一个随机队列: 1. 创建一个生产者消费者模型,启动RabbitMQ,并设置一个默认的交换机(Exchange),比如`direct`类型,这个交换机会直接将消息路由到绑定的队列。 ```java ConnectionFactory factory = new CachingConnectionFactory("localhost"); Queue.QueueNameGenerator queueNameGen = () -> { // 这里可以使用UUID或者自定义算法生成随机字符串作为队列名 return "random_" + UUID.randomUUID().toString(); }; DefaultRoutingSlipStrategy routingSlipStrategy = new DefaultRoutingSlipStrategy(queueNameGen); MessageConverter converter = ...; // 配置适配器 RabbitTemplate rabbitTemplate = new RabbitTemplate(factory, converter); rabbitTemplate.setRoutingSlipStrategy(routingSlipStrategy); ``` 2. 当发送消息时,可以指定一个路由键(Routing Key),这相当于告诉交换机应该将消息发送到哪个队列。由于队名是动态生成的,每次发送都会得到一个新的随机队列。 ```java Map<String, Object> headers = new HashMap<>(); headers.put("routingKey", "your.routing.key"); // 自定义的路由键 String messageBody = "Your message body"; rabbitTemplate.convertAndSend("defaultExchange", headers, messageBody); ``` 3. 消费端可以根据需要订阅这个动态生成的队列,Spring AMQP会自动处理连接和断开操作。 注意,这里并没有完全的随机性,因为队列名称通常是基于某种规则生成的唯一标识。如果你需要真正的随机队列名字并且希望避免名称冲突,可以在创建队列时增加一些额外的安全措施,例如检查队列是否已存在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值