当前位置: 首页 > 知识库问答 >
问题:

如何使用Spring Rabbitmq连接到多个Rabbitmq节点?

魏康安
2023-03-14

我正在用Spring编写一个服务,并使用Spring AMQP连接到Rabbitmq。

我有两个rabbitmq集群,一个仅用于发布消息(消息通过联合插件发送到另一个集群),另一个集群用于声明最终用户将从中使用的队列。

节点位于aws lb后面,每个集群有一个lb。

我在代码中使用CachingConnectionFactory和RabbitTemboard、RabbitAdmin,我希望与所有节点都有连接,以便我可以使用它们。对于将包含我添加到配置中的队列的集群,query-master-locator=随机,因此即使我的服务没有与它们的连接,新队列也将在集群中的所有节点中声明。

对于发布消息的集群,我有更多的问题,因为我需要在服务中直接连接到每个节点,以便能够分离节点之间的负载。

所以我的问题是,如何在我的服务中创建与集群中所有节点的连接,以便它们都用于声明队列和发送消息?

现在,在我对这个问题有了某种解决方案之后,下一个问题是在集群中添加新节点时会发生什么?如何创建到它的连接并开始使用它?

我使用的是Rabbitmq-3.7.9、Spring-2.0.5、Spring AMQP-2.0.5

非常感谢!

共有1个答案

赫连靖琪
2023-03-14

目前还没有这样做的机制。

默认情况下,Spring AMQP只打开一个连接(可选两个,一个用于发布,一个用于消费)。

即使使用CacheMode。连接,您将为每个消费者获得一个新连接(并且将根据生产者的需要创建和缓存连接),您将无法控制连接到哪个节点;这是LB的函数。

该框架确实提供了LocalizedQueueConnectionFactory,它将尝试从托管队列的节点消耗,但它无法与就位的负载均衡器一起工作。

然而,通常很少需要这样的优化。

您是否正在尝试解决您现在遇到的实际问题,或者您认为可能存在问题的事情?

通常,最好不要执行过早的优化。

 类似资料:
  • 问题内容: 我有一个使用Java Servlet / JSP的应用程序。我的应用有多个客户端,但是每个客户端都有一个单独的数据库。所有数据库都具有相同的架构。我想确定用户登录系统时要使用哪个数据库连接。 例如,客户端A登录后,我确定客户端A属于数据库C,抓住了数据库C的连接,然后继续愉快地进行操作。 我正在将JPA与Hibernate一起用作我的JPA提供程序。是否可以使用多个持久性单元并在登录时

  • 下面的代码片段是从JoinedStreams的javadoc复制的 这两个流仅基于一个键(通过< code>t =计算)进行连接 我会问我如何基于多个键进行连接,例如,one.a = two.a和

  • 我想在一个容器中运行 RabbitMQ,在另一个容器中运行工作进程。工作进程需要访问 RabbitMQ。 我希望这些通过进行管理。 这是我的<代码>docker compose。迄今为止,yml文件: 所以我暴露了RabbitMQ端口。工作进程使用以下URL访问RabbitMQ: 这是他们在官方教程中使用的,但是已被替换为,因为容器应该可以使用与容器名称相同的主机名来发现: 默认情况下,“合成”会

  • 我的第二个问题是:是否需要?我将来可能会添加更多的节点。

  • 我有一个通用的独立JMS应用程序,它与以下JMS提供程序一起工作WebSphere、HornetQ和ActiveMq。我传递上下文。INITIAL_CONTEXT_FACTORY和上下文。PROVIDER_URL作为我的应用程序的参数,并通过这样做来创建一个命名上下文 并使用此上下文进行对象查找。 我知道RabbitMQ不是JMS提供程序,所以它没有初始上下文类或提供程序网址,但它提供了一个JMS

  • 我将RabbitMQ包用于Symfony2 web框架。我的问题是,在TERMINAL中运行多个workers后,如何避免创建多个连接(以防止使代理过载)?在下面的示例中,我运行了两个workers,结果有两个connections/channel。 config.yml services.yml