Spring AMQP多个Vhosts

时间:2014-11-27 21:23:59

标签: java spring rabbitmq amqp spring-amqp

我目前需要为此应用程序使用三个vhost。我只接收一个消息,而其他消息用于RPC调用。目前我正在使用CachingConnectionFactory我为每个虚拟主机创建了一个子类。然后我正在制作每个子类bean。我当然可以抓住连接工厂为正确的vhost实例创建RabbitTemplate

我在关于AbstractRoutingConnectionFactory的文档中看到了,但想知道是否有任何理由我应该重构我当前正在运行的代码。我想要最易维护和最全面的解决方案,而不是“最简单”的解决方案。

谢谢!

1 个答案:

答案 0 :(得分:4)

我不确定为什么你觉得有必要继承CachingConnectionFactory你可以简单地宣布多个工厂......

<rabbit:connection-factory id="default" host="localhost" />

<rabbit:connection-factory id="foo" host="localhost" virtual-host="/foo" />

<rabbit:connection-factory id="bar" host="localhost" virtual-host="/bar" />

您是否使用路由连接工厂(例如SimpleRoutingConnectionFactory)取决于您的应用程序需求。如果您不使用它,则需要3 RabbitTemplate s并决定在运行时使用哪一个。

使用路由连接工厂,RabbitTemplate可以根据邮件内容send-connection-factory-selector-expression做出决定。

除了第二个将您的应用与决策分离之外,没有太多区别。例如,您可以在发送之前设置邮件标头customerId(如果您使用convertAndSend方法,则可以在邮件转换期间设置)并使用选择器表达式,例如@vhostFor.select(messageProperties.headers.customerId)。< / p>

如果您以后添加新的虚拟主机,则不必更改主应用程序,只需更改vhostFor查找bean即可选择正确的虚拟主机。