ActiveMQ通过高延迟网络链路进行存储和转发

ActiveMQ通过高延迟网络链路进行存储和转发,activemq,Activemq,假设我们在数据中心a有一个生产者,在数据中心B有一个ActiveMQ代理和消费者 向代理发送持久的非异步消息将导致数据中心之间网络链路的往返时间 如果在数据中心a中安装了本地代理,并将其配置为存储和转发到B,则生产者将不再受到慢速链接的限制 由于代理网络的存在,可以预期端到端吞吐量的提高吗?是否可以独立于客户端到代理B的确认模式来控制从代理B到代理A的确认模式?是的,您可以通过jms.useAyncSend=trueURI选项控制在每个链接上同步还是异步发送(请参阅),但你确定你想让他们在不同的

假设我们在数据中心a有一个生产者,在数据中心B有一个ActiveMQ代理和消费者

向代理发送持久的非异步消息将导致数据中心之间网络链路的往返时间

如果在数据中心a中安装了本地代理,并将其配置为存储和转发到B,则生产者将不再受到慢速链接的限制


由于代理网络的存在,可以预期端到端吞吐量的提高吗?是否可以独立于客户端到代理B的确认模式来控制从代理B到代理A的确认模式?

是的,您可以通过
jms.useAyncSend=true
URI选项控制在每个链接上同步还是异步发送(请参阅),但你确定你想让他们在不同的道路上有所不同吗?如果在一个链接上使用异步发送,而不是在另一个链接上使用异步发送,那么如果出现问题,仍然有丢失消息的风险


因此,要么这是不可接受的,您的本地代理只是将瓶颈从一个进程转移到另一个进程(在这种情况下,您的最佳选择可能是以事务方式发送消息,因为这些发送可以是异步的),要么这是可接受的(在这种情况下,只需在您的生产者上设置URI选项,而不必担心本地代理). 我看到的唯一一件事是,在后一种情况下,本地代理会购买您的产品,即允许您设置一次
useAsyncSend=true
,并将其应用于所有客户机,这可能值得根据您的情况付出努力。

从理论上讲,代理网络不会增加吞吐量。在发送持久消息的情况下,代理到代理将始终是同步传输。不过,您的制作人将表现得不那么懒散,始终保持与本地代理的高速代理连接。如果生产者有一个HTTP请求等待消息排队,然后再发送回响应,那么这是一个很好的特性。不过,这些消息不会更快到达最终目的地

如果使用非持久性消息,吞吐量将大大增加。您还可以将代理配置为异步。但是,您需要处理消息丢失的情况。在某些场景中,这可以通过应用程序级逻辑来处理,但在其他场景中,这是不可能的,或者需要付出太多的努力