ActiveMQ 通过高延迟网络存储和转发 link
ActiveMQ store and forward over a high latency network link
假设我们在数据中心 A 中有一个生产者,在数据中心 B 中有一个 ActiveMQ 代理和消费者。
向代理发送持久的非异步消息将导致数据中心之间的网络往返时间 link。
如果在数据中心 A 中安装本地代理并配置为存储和转发到 B,生产者将不再受到缓慢 link 的限制。
是否可以通过经纪人网络提高端到端吞吐量?是否可以控制从代理 B 到代理 A 的确认模式独立于客户端到代理 B 的确认模式?
是的,您可以通过 jms.useAsyncSend=true
URI 选项(参见 http://activemq.apache.org/async-sends.html)控制每个 link 上的发送是同步还是异步完成,但您确定要它们吗在不同的道路上有所不同?如果您在一个 link 而不是另一个上使用异步发送,如果出现问题,您仍然有丢失消息的风险。
所以要么这是不可接受的,您的本地代理只会将瓶颈从一个进程转移到另一个进程(在这种情况下,您最好的选择可能是事务性地发送消息,因为这些发送可以是异步的)或者它是可以接受的(在这种情况下,只需在您的生产者上设置该 URI 选项,而不必理会本地代理)。在后一种情况下,我看到本地经纪人唯一会为您买单的是,它会让您设置 useAsyncSend=true
一次并将其应用于所有客户,根据您的情况,这可能值得付出努力。
理论上,经纪人网络不会增加吞吐量。如果您发送持久消息,代理到代理将始终是同步传输。不过,您的制作人会表现得不那么迟钝,始终与本地经纪人建立高速经纪人连接。如果您的生产者有一个 HTTP 请求等待消息在响应被发回之前排队,这可能是一个很好的特性。不过,这些消息不会更快地到达最终目的地。
如果使用非持久消息,吞吐量会增加很多。您还可以将代理配置为异步代理。但是,您需要处理消息丢失的情况。在某些情况下,这可以通过应用程序级别的逻辑来处理,但在其他情况下这是不可能的,或者需要付出太多努力。
假设我们在数据中心 A 中有一个生产者,在数据中心 B 中有一个 ActiveMQ 代理和消费者。
向代理发送持久的非异步消息将导致数据中心之间的网络往返时间 link。
如果在数据中心 A 中安装本地代理并配置为存储和转发到 B,生产者将不再受到缓慢 link 的限制。
是否可以通过经纪人网络提高端到端吞吐量?是否可以控制从代理 B 到代理 A 的确认模式独立于客户端到代理 B 的确认模式?
是的,您可以通过 jms.useAsyncSend=true
URI 选项(参见 http://activemq.apache.org/async-sends.html)控制每个 link 上的发送是同步还是异步完成,但您确定要它们吗在不同的道路上有所不同?如果您在一个 link 而不是另一个上使用异步发送,如果出现问题,您仍然有丢失消息的风险。
所以要么这是不可接受的,您的本地代理只会将瓶颈从一个进程转移到另一个进程(在这种情况下,您最好的选择可能是事务性地发送消息,因为这些发送可以是异步的)或者它是可以接受的(在这种情况下,只需在您的生产者上设置该 URI 选项,而不必理会本地代理)。在后一种情况下,我看到本地经纪人唯一会为您买单的是,它会让您设置 useAsyncSend=true
一次并将其应用于所有客户,根据您的情况,这可能值得付出努力。
理论上,经纪人网络不会增加吞吐量。如果您发送持久消息,代理到代理将始终是同步传输。不过,您的制作人会表现得不那么迟钝,始终与本地经纪人建立高速经纪人连接。如果您的生产者有一个 HTTP 请求等待消息在响应被发回之前排队,这可能是一个很好的特性。不过,这些消息不会更快地到达最终目的地。
如果使用非持久消息,吞吐量会增加很多。您还可以将代理配置为异步代理。但是,您需要处理消息丢失的情况。在某些情况下,这可以通过应用程序级别的逻辑来处理,但在其他情况下这是不可能的,或者需要付出太多努力。