Spring 带有 RoutingConnectionFactory 的 RabbitListener
Spring RabbitListener with RoutingConnectionFactory
我设置了一个 SimpleRoutingConnectionFactory
比如:
@Bean
@Primary
public SimpleRoutingConnectionFactory routingConnectionFactory(ConnectionFactory cf1, ConnectionFactory cf2) {
SimpleRoutingConnectionFactory rcf = new SimpleRoutingConnectionFactory();
Map<Object, ConnectionFactory> map = new HashMap<>();
map.put("[foo.server1,bar.server1]", cf1); // receive
map.put("[foo.server2,bar.server2]", cf2); // receive
map.put("server1", cf1); // send
map.put("server2", cf2); // send
rcf.setTargetConnectionFactories(map);
rcs.setDefaultConnectionFactory(defaultConnectionFactory());
return rcf;
}
上面的 RoutingConnectionFactory
允许我按预期使用 SimpleResourceHolder.bind(rabbitTemplate().getConnectionFactory(), host)
在特定服务器上发送消息,但接收却不行。
然后我手动注册了一个 MessageListenerContainer
来侦听 foo.server1,bar.server1,foo.server2,bar.server2
队列。
我希望看到 cf1
为发送到 foo.server1
的消息创建的频道和 cf2
为发送到 bar.server2
的消息创建的频道,但是频道似乎是由 defaultConnectionFactory
.
创建的
但是,我可以在 DEBUG 日志中看到:
Cannot determine target ConnectionFactory for lookup key [[foo.server1,bar.server1,foo.server2,bar.server2]]
。
这意味着 MessageListenerContainer
对所有队列使用单个 ConnectionFactory
?我可以以某种方式配置我的侦听器以每个队列使用不同的工厂吗?我尝试为每个队列注册一个工厂而不是对它们进行分组,但这也不起作用。
This means that MessageListenerContainer uses a single ConnectionFactory for all queues?
没错。
Can I somehow configure my listener to use different factory per queue? I tried registering a factory per queue instead of grouping them, but that doesn't work either.
否;每个队列都需要一个单独的容器。你还不如将真正的连接工厂绑定到它而不是使用路由工厂。
我设置了一个 SimpleRoutingConnectionFactory
比如:
@Bean
@Primary
public SimpleRoutingConnectionFactory routingConnectionFactory(ConnectionFactory cf1, ConnectionFactory cf2) {
SimpleRoutingConnectionFactory rcf = new SimpleRoutingConnectionFactory();
Map<Object, ConnectionFactory> map = new HashMap<>();
map.put("[foo.server1,bar.server1]", cf1); // receive
map.put("[foo.server2,bar.server2]", cf2); // receive
map.put("server1", cf1); // send
map.put("server2", cf2); // send
rcf.setTargetConnectionFactories(map);
rcs.setDefaultConnectionFactory(defaultConnectionFactory());
return rcf;
}
上面的 RoutingConnectionFactory
允许我按预期使用 SimpleResourceHolder.bind(rabbitTemplate().getConnectionFactory(), host)
在特定服务器上发送消息,但接收却不行。
然后我手动注册了一个 MessageListenerContainer
来侦听 foo.server1,bar.server1,foo.server2,bar.server2
队列。
我希望看到 cf1
为发送到 foo.server1
的消息创建的频道和 cf2
为发送到 bar.server2
的消息创建的频道,但是频道似乎是由 defaultConnectionFactory
.
但是,我可以在 DEBUG 日志中看到:
Cannot determine target ConnectionFactory for lookup key [[foo.server1,bar.server1,foo.server2,bar.server2]]
。
这意味着 MessageListenerContainer
对所有队列使用单个 ConnectionFactory
?我可以以某种方式配置我的侦听器以每个队列使用不同的工厂吗?我尝试为每个队列注册一个工厂而不是对它们进行分组,但这也不起作用。
This means that MessageListenerContainer uses a single ConnectionFactory for all queues?
没错。
Can I somehow configure my listener to use different factory per queue? I tried registering a factory per queue instead of grouping them, but that doesn't work either.
否;每个队列都需要一个单独的容器。你还不如将真正的连接工厂绑定到它而不是使用路由工厂。