如何在同一台机器上运行两个grails应用程序,让它们不共享rabbitMQ

时间:2012-07-16 23:38:27

标签: grails rabbitmq grails-plugin-rabbitmq

我有一个运行单个兔子节点的grails应用程序。太棒了。我想在另一个端口上的同一台机器上第二次启动同一个应用程序。目前,这两个应用程序都可以从这两个应用程我希望他们的兔子是独立的。确保每个应用程序仅响应其发送的消息的最简单方法是什么?多个兔子队列?

2 个答案:

答案 0 :(得分:3)

您可以在the grails configuration中提供虚拟主机条目:

rabbitmq.connectionfactory.virtualHost  The name of the virtual host to connect to

在RabbitMQ中定义两个不同的虚拟主机,每个grails应用程序都有自己配置的区域。通过一个vhost发送的消息只能在该vhost上使用,有效地将两个grails应用程序分开,而无需更改队列设置或每个应用程序的其他内部部分 - 只需连接的配置。

请记住access control is performed on a per vhost basis,因此您必须授予您的用户访问rabbitmq中每个vhost的权限。

答案 1 :(得分:2)

正如@fiskfisk所说,多个虚拟主机是一个选项,如果你有一组复杂的队列,交换和绑定,它们会特别好用。在第二个应用程序中使用新的vhost有一些缺点,包括重复访问控制管理,以及一些较小的性能开销。

如果您有一个相当简单的队列/交换/绑定设置,我建议将第二个应用程序指向具有不同名称的队列,或者让您的应用程序能够运行时配置为使用不同的队列,或者利用RabbitMQ中基于主题的路由,并让每个应用程序使用特定于应用程序的前缀(或类似的东西)标记其消息。

使用主题路由来区分应用程序的一个优点是,您可以轻松地浏览完整的消息流,并使用您最初未预见的流做其他事情,包括归档日志记录或审计日志记录等内容作为其他指标收集或分析。


TL;博士;

为了实现长期灵活性,请让应用程序的每个实例根据主题路由向队列发送消息。

对于quick-and-dirty / get-it-working-yesterday,请为应用程序的每个实例使用单独的vhost。