1

我有一个使用单个兔子节点运行的 grails 应用程序。太好了。我想在不同端口上的同一台机器上再次启动同一个应用程序。目前,这两个应用程序都回答了这两个应用程序的工作。我希望他们的兔子独立。确保每个应用程序只响应它发送的消息的最简单方法是什么?多个兔子队列?

4

2 回答 2

3

您可以在grails 配置中提供一个虚拟主机条目:

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

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

请记住,访问控制是基于每个虚拟主机执行的,因此您必须授予用户对 rabbitmq 中每个虚拟主机的访问权限。

于 2012-07-17T11:22:35.683 回答
2

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

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

使用主题路由来区分应用程序的一个优点是,您可以轻松地深入了解完整的消息流,并使用该流执行您最初没有预见到的其他事情,包括归档日志记录或审计日志记录以及其他指标收集或分析。


tl;博士;

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

对于快速和肮脏/昨天得到它的工作,为您的应用程序的每个实例使用单独的虚拟主机。

于 2012-07-17T13:02:04.903 回答