如何动态添加新队列(来自不同主机)到@RabitListener?
How to dynamically add new queues (from different hosts) to @RabitListener?
我正在尝试让@RabbitListener 监听来自从属性加载的不同主机的多个队列。队列相同,需要相同的消息处理。
我做到了"statically"
通过这样声明我的工厂:
@Bean
public ConnectionFactory defaultConnectionFactory() {
CachingConnectionFactory cf = new CachingConnectionFactory();
cf.setAddresses(hosts);
cf.setPort(port);
cf.setUsername(username);
cf.setPassword(password);
cf.setConnectionLimit(10000);
cf.getRabbitConnectionFactory().setConnectionTimeout(connectionTimeout);
return cf;
}
@Bean
public SimpleRabbitListenerContainerFactory connectionFactory2() {
SimpleRabbitListenerContainerFactory sf = new SimpleRabbitListenerContainerFactory();
CachingConnectionFactory cf = new CachingConnectionFactory();
cf.setAddresses(host2);
cf.setPort(port2);
cf.setUsername(username2);
cf.setPassword(password2);
cf.setConnectionLimit(connectionLimit);
cf.getRabbitConnectionFactory().setConnectionTimeout(connectionTimeout);
sf.setConnectionFactory(cf);
return sf;
}
然后将@RabbitListener 注释添加到我的侦听器class,如下所示:
@RabbitListener (queues = "q1")
@RabbitListener (queues = "q2" , containerFactory = "connectionFactory2")
public class RabbitListener {
但我希望能够在启动时通过加载一些 属性 列表(如 rabbit.host[i]
然后动态地将其添加到我的侦听器来创建连接工厂。
这样的事情可能吗?此用例的最佳实践是什么?
你不能用静态 @RabbitListener
注释来做,但你可以 register listener endpoints programmatically.
您可以使用此处所示的 SimpleRabbitListenerEndpoint
,或者如果您想调用 POJO 方法(如 @RabbitListener
.
,则可以使用 MethodRabbitListenerEndpoint
您可以在重载的 registerEndpoint
方法中连接适当的工厂。
我正在尝试让@RabbitListener 监听来自从属性加载的不同主机的多个队列。队列相同,需要相同的消息处理。
我做到了"statically" 通过这样声明我的工厂:
@Bean
public ConnectionFactory defaultConnectionFactory() {
CachingConnectionFactory cf = new CachingConnectionFactory();
cf.setAddresses(hosts);
cf.setPort(port);
cf.setUsername(username);
cf.setPassword(password);
cf.setConnectionLimit(10000);
cf.getRabbitConnectionFactory().setConnectionTimeout(connectionTimeout);
return cf;
}
@Bean
public SimpleRabbitListenerContainerFactory connectionFactory2() {
SimpleRabbitListenerContainerFactory sf = new SimpleRabbitListenerContainerFactory();
CachingConnectionFactory cf = new CachingConnectionFactory();
cf.setAddresses(host2);
cf.setPort(port2);
cf.setUsername(username2);
cf.setPassword(password2);
cf.setConnectionLimit(connectionLimit);
cf.getRabbitConnectionFactory().setConnectionTimeout(connectionTimeout);
sf.setConnectionFactory(cf);
return sf;
}
然后将@RabbitListener 注释添加到我的侦听器class,如下所示:
@RabbitListener (queues = "q1")
@RabbitListener (queues = "q2" , containerFactory = "connectionFactory2")
public class RabbitListener {
但我希望能够在启动时通过加载一些 属性 列表(如 rabbit.host[i]
然后动态地将其添加到我的侦听器来创建连接工厂。
这样的事情可能吗?此用例的最佳实践是什么?
你不能用静态 @RabbitListener
注释来做,但你可以 register listener endpoints programmatically.
您可以使用此处所示的 SimpleRabbitListenerEndpoint
,或者如果您想调用 POJO 方法(如 @RabbitListener
.
MethodRabbitListenerEndpoint
您可以在重载的 registerEndpoint
方法中连接适当的工厂。