在我的场景中,我需要在运行时动态地创建大量队列,这就是为什么我不想使用@Bean,而是想要编写一个创建队列的函数,我会在需要的时候调用它。在这里,当我使用@bean注解时,它会在rabbitmq服务器上创建队列。
@Bean
public Queue productQueue(final String queueName) {
return new Queue(queueName);
} 但是使用不带@Bean的相同代码
public Queue productQueue(final String queueName) {
return new Queue(queueName);
}当调用此函数不在rabbitmq服务器上创建队列时
Queue queue = <Object>.productQueue("product-queue");发布于 2021-11-03 12:03:39
为了动态创建rabbitmq队列,我使用了以下方法,如果您还想创建交换并绑定到队列,这是最好的方法。
@Autowired
private ConnectionFactory connectionFactory;
@Bean
public AmqpAdmin amqpAdmin() {
return new RabbitAdmin(connectionFactory);
}现在您可以定义一个类来创建队列、交换和绑定它们
public class rabbitHelper {
@Autowired
private RabbitAdmin rabbitAdmin;
public Queue createQueue(String queueName) {
Queue q = new Queue(queueName);
rabbitAdmin.declareQueue(q);
return q;
}
public Exchange createExchange(String exchangeName) {
Exchange exchange = new DirectExchange(exchangeName);
rabbitAdmin.declareExchange(exchange);
return exchange;
}
public void createBinding(String queueName, String exchangeName, String routingKey) {
Binding binding = new Binding(queueName, Binding.DestinationType.QUEUE, queueName, routingKey, null);
rabbitAdmin().declareBinding(binding);
}
}发布于 2021-10-30 09:12:55
Queue对象必须是上下文中的bean,并且由Spring管理。要在运行时动态创建队列,请使用作用域prototype定义bean
@Bean
@Scope("prototype")
public Queue productQueue(final String queueName) {
return new Queue(queueName);
} 并在运行时使用ObjectProvider创建队列
@Autowired
private ObjectProvider<Queue> queueProvider;
Queue queue1 = queueProvider.getObject("queueName1");
Queue queue2 = queueProvider.getObject("queueName2");https://stackoverflow.com/questions/69776621
复制相似问题