ActiveMQ通过高延迟网络链接存储和转发



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

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

如果本地代理安装在数据中心 A 中并配置为存储并转发到 B,则创建者将不再受到慢速链接的限制。

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

理论上,代理网络不会增加吞吐量。如果您发送持久消息,代理到代理将始终是同步传输。不过,您的生产者将表现得不那么笨拙,始终与本地经纪人建立高速代理连接。如果您的生产者有一个 HTTP 请求,在发送回响应之前等待消息排队,这可能是一个不错的功能。不过,这些消息不会更快地到达最终目的地。

如果使用非持久性消息,吞吐量将大大增加。您还可以将代理到代理配置为异步。但是,您需要处理消息丢失的情况。在某些情况下,这可以由应用程序级逻辑处理,但在其他方案中,这是不可能的,或者工作量太大。

是的,您可以通过 jms.useAsyncSend=true URI 选项控制发送是在每个链路上同步完成还是异步完成(请参阅 http://activemq.apache.org/async-sends.html),但您确定希望它们在不同的路径上有所不同吗? 如果您在一个链接上使用异步发送,而不是在另一个链接上使用异步发送,则在出现问题时,您仍然有丢失消息的风险。

因此,要么

这是不可接受的,并且您的本地代理只是将瓶颈从一个进程移动到另一个进程(在这种情况下,最好的选择可能是以事务方式发送消息,因为这些发送可能是异步的),要么它是可以接受的(在这种情况下,只需在您的生产者上设置该 URI 选项,不要打扰本地代理)。 我唯一看到当地经纪人在后一种情况下会购买您的是,它会让您设置一次useAsyncSend=true并将其应用于所有客户,根据您的情况,这可能值得付出努力。

最新更新