我目前需要为此应用程序使用三个vhost。我只接收一个消息,而其他消息用于RPC调用。目前我正在使用CachingConnectionFactory
我为每个虚拟主机创建了一个子类。然后我正在制作每个子类bean。我当然可以抓住连接工厂为正确的vhost实例创建RabbitTemplate
。
我在关于AbstractRoutingConnectionFactory
的文档中看到了,但想知道是否有任何理由我应该重构我当前正在运行的代码。我想要最易维护和最全面的解决方案,而不是“最简单”的解决方案。
谢谢!
答案 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即可选择正确的虚拟主机。