我有一个交换(exchange1),它可以根据routing-key-expression路由到n不同的队列。1.所有图像消息应转到队列11.所有文档消息都应转到队列21.所有视频消息应转到默认队列3在未来,队列数量可以增加,如(所有视频和mp4扩展应该转到queue4)我们如何创建队列并将其动态绑定到一个特定的交换,并且应该只使用一个流侦听器?
exchange1
n
queue4
rryofs0p1#
它不能通过属性直接使用Spring Cloud Stream完成。您必须使用所需的路由键声明Exchange、Queue和Binding@Bean s,然后配置消费者绑定以不声明队列和绑定),然后设置s.c.s.consumer.multiplex=true和s.c.s.destination=queue1,queue2,queue3。请参阅使用现有队列/交换以了解如何禁用绑定器配置。
Exchange
Queue
Binding
@Bean
s.c.s.consumer.multiplex=true
s.c.s.destination=queue1,queue2,queue3
g2ieeal72#
在Sping Boot 中使用Spring-AMQP插件可以轻松完成。我已经附上了下面的片段如何可以实现。(我相信代码比理论上的话更有说服力):
package com.savk.workout.spring.rabbitmqconversendreceivefanoutproducer; import org.springframework.amqp.core.*; import org.springframework.amqp.rabbit.core.RabbitAdmin; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component public class DynamicBindingDemo { @Autowired private RabbitAdmin rabbitAdmin; @Autowired private RabbitTemplate rabbitTemplate; private boolean switchedOn = true; //Toggle binding programatically @Scheduled(fixedRate = 10000L) public void manipulateBinding() { Exchange exchange = ExchangeBuilder.directExchange("exchange").autoDelete().build(); Queue queue = QueueBuilder.nonDurable("queue").build(); Binding binding = BindingBuilder.bind(queue).to(exchange).with("routingkey").noargs(); if(switchedOn) { rabbitAdmin.declareBinding(binding); } else { rabbitAdmin.removeBinding(binding); } } @Bean public RabbitAdmin rabbitAdmin() { return new RabbitAdmin(rabbitTemplate.getConnectionFactory()); } }
确保你也有相应的RabbitListener:
@RabbitListener(queues = "queuename") @RabbitHandler public String handle(String msg) { System.out.println("RCVD :: " + msg); String response = "PONG { " + msg + " } from INSTANCE " + INSTANCE; return response; }
你可以看到一切都可以动态地完成。您所需要的就是使用绑定进行操作。
2条答案
按热度按时间rryofs0p1#
它不能通过属性直接使用Spring Cloud Stream完成。
您必须使用所需的路由键声明
Exchange
、Queue
和Binding
@Bean
s,然后配置消费者绑定以不声明队列和绑定),然后设置s.c.s.consumer.multiplex=true
和s.c.s.destination=queue1,queue2,queue3
。请参阅使用现有队列/交换以了解如何禁用绑定器配置。
g2ieeal72#
在Sping Boot 中使用Spring-AMQP插件可以轻松完成。我已经附上了下面的片段如何可以实现。(我相信代码比理论上的话更有说服力):
确保你也有相应的RabbitListener:
你可以看到一切都可以动态地完成。您所需要的就是使用绑定进行操作。