【问题标题】:Load Balancing ActimeMQ Artemis in JBoss EAP 7.2.0JBoss EAP 7.2.0 中的负载平衡 ActimeMQ Artemis
【发布时间】:2021-02-23 16:55:25
【问题描述】:

我们正在使用 Spring Boot 和 Apache Camel 开发一个应用程序,该应用程序从 ActiveMQ Artemis 读取消息,进行一些转换,然后将其发送到 ActiveMQ Artemis。我们的应用程序在本地 JBoss EAP 7.2.0 中部署为 war 文件。源应用程序和目标应用程序都远离我们的应用程序,它们也部署在 JBoss EAP 7.2.0 上。 Camel 连接的远程队列是 ActiveMQ Artemis,它是在 JBoss 中创建并使用 http-remoting 协议连接的。这些设置在每个应用程序只有一个节点时有效。

现在我们将源应用程序和目标应用程序分别设置为 3 个节点(即它们将部署在多个 JBoss 服务器中)。为了访问源应用程序和目标应用程序的前端,我们通过负载均衡器配置和访问它们。

我们可以将负载均衡器配置为从 Camel 层访问源代理和目标代理吗?将有 3 个源代理和 3 个目标代理。或者在这种情况下集群代理是唯一的选择吗?

我们正在考虑队列之间的负载平衡,而不是集群。假设我们有三个队列q1q2q3,对应的代理为b1b2b3。我将在 Camel 层中配置负载均衡器 url,例如 http-remoting://<load-balancer-url>:<port>(就像我们在负载均衡 HTTP API 请求时所做的那样)。任何传入的消息都会到达负载均衡器,负载均衡器将决定将消息路由到哪个队列。

【问题讨论】:

  • 是的,贾斯汀
  • 我们正在考虑队列之间的负载平衡而不是集群,我会告诉你负载平衡器产品,同时想检查该方法的可行性,因为我在互联网上找不到任何东西
  • 不完全是这样,假设我们有三个队列 q1、q2 和 q3 以及相应的代理 b1、b2 和 b3。 J 将在骆驼层配置负载均衡器 url,例如 http-remoting://:, (我们在负载均衡 API 请求时会做很多事情)。任何传入的消息都会到达负载均衡器,它会决定将消息路由到哪个队列
  • 好的,谢谢,会查看并返回。是的,我想像 API 负载平衡器一样在消息级别平衡负载。
  • 如果我从浏览器或应用程序中访问一个作为负载均衡器 URL 的 URL(HTTP 请求),该请求会到达负载均衡器,并且负载均衡策略(例如循环)会确定哪个后端服务请求会去。我指的是这件事。

标签: spring-boot apache-camel load-balancing activemq-artemis jboss-eap-7


【解决方案1】:

JMS 连接是有状态的。当客户端创建连接时,没有指示它将向哪个队列发送消息。负载均衡器必须将该客户端的连接定向到b1b2b3,并且它无法确定它应该去哪里。使用消息传递的负载均衡器几乎肯定只能平衡连接,而不是消息。听起来您想要在消息级别进行负载平衡。也许你应该研究一下Qpid Dispatch Router 之类的东西。

消息传递不使用 HTTP,因此无法像使用 HTTP API 那样使用 HTTP 负载平衡器。负载均衡器很容易检查 HTTP 标头和路由请求,特别是因为 HTTP 是无状态的。但是,消息连接是有状态的,并且协议通常比 HTTP 复杂得多。我不知道有任何负载均衡器可以按照您希望的消息传递方式工作。

【讨论】:

    【解决方案2】:

    您需要您的客户端不使用拓扑,您可以通过在 AMQConnectionFactory 上使用“setUseTopologyForLoadBalancing”来做到这一点。如果您从 EAP 获得连接工厂,我认为这是自 EAP 7.3 起在连接工厂上可配置的。

    【讨论】:

    • 你能指导我做这个吗?这需要在我们定义连接工厂的standalone-full.xml 中定义吗?假设我的目标包含三个 JBoss 节点和对应的三个目标队列,我们​​是否需要在三个 JBoss 服务器的standalone-full.xml 中分别定义这个?
    • 是的,在 EAP 7.3 中,您可以在 (pooled-)connection-factory 元素 docs.wildfly.org/20/wildscribe/subsystem/messaging-activemq/… 中定义它。但这可能不是您需要重新阅读已编辑的问题的原因,因为这是在您无法直接访问节点的情况下
    • 谢谢,如果有帮助,我会处理这个
    猜你喜欢
    • 1970-01-01
    • 2011-04-15
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    • 2020-01-05
    • 2022-08-10
    • 2021-07-11
    相关资源
    最近更新 更多