gpt4 book ai didi

java - Spring AMQP 多个虚拟主机

转载 作者:行者123 更新时间:2023-11-30 07:04:59 25 4
gpt4 key购买 nike

我目前需要为这个应用程序使用三个虚拟主机。我仅作为消费者通过一个接收消息,而其他接收消息用于 RPC 调用。目前我正在使用 CachingConnectionFactory,我已经为每个虚拟主机创建了一个子类。然后我正在制作这些子类中的每一个 bean。然后我当然可以获取连接工厂来为正确的 vhost 实例创建 RabbitTemplate

我在文档中看到了关于 AbstractRoutingConnectionFactory 的内容,但想知道是否有任何理由让我应该重构我当前工作的代码。我想要最易于维护和性能最好的解决方案,而不是“最简单”的解决方案。

谢谢!

最佳答案

我不确定为什么您认为有必要对 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 并决定在运行时使用哪一个。

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

除了第二个将您的应用程序与决策分离之外,实际上并没有太大区别。例如,您可以在发送前设置消息 header customerId(或者如果您使用的是 convertAndSend 方法,则在消息转换期间)并使用选择器表达式,例如 @vhostFor.select(messageProperties.headers.customerId).

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

关于java - Spring AMQP 多个虚拟主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27178810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com