假设我们在数据中心A中有一个生产者,在数据中心B中有一个ActiveMQ经纪人和消费者。
向代理发送持久的非异步消息将导致数据中心之间网络链接的往返时间。
如果本地代理安装在数据中心A并配置为存储并转发到B,则生产者将不再受慢速链接的限制。
由于经纪人网络,可以提高端到端的吞吐量吗?是否有可能将经纪人B的确认模式控制到经纪人A而不依赖于经纪人B的客户交易模式?
答案 0 :(得分:1)
理论上,经纪人网络不会增加吞吐量。如果您发送持久性消息,代理到代理将始终是同步传输。尽管如此,您的生产商将表现得更加低迷,始终与当地经纪商建立高速经纪人联系。如果您的生产者在发回响应之前有一个等待消息入队的HTTP请求,这可能是一个很好的功能。这些消息不会更快地到达最终目的地。
如果您使用非持久性消息,吞吐量将大大增加。您还可以将代理配置为代理以进行异步。但是,您需要处理消息丢失的情况。在某些情况下,这可以通过应用程序级逻辑来处理,但在其他情况下,这是不可能的,或者是太多的努力。
答案 1 :(得分:0)
是的,您可以通过jms.useAsyncSend=true
URI选项控制每个链接上的发送是同步还是异步完成(请参阅http://activemq.apache.org/async-sends.html),但是您确定要让它们在不同的路径上有所不同吗?如果你在一个链接而不是另一个链接上使用异步发送,那么如果出现问题,你仍然有丢失消息的风险。
所以要么这是不可接受的,你的本地经纪人只是将瓶颈从一个流程转移到另一个流程(在这种情况下,你最好的选择可能是在事务上发送消息,因为那些发送可以是异步的)或者它是可接受的(在这种情况下) case只是在你的生产者上设置了这个URI选项,并且不打扰本地代理)。在后一种情况下,我唯一看到本地经纪人会给你买的是,它会让你设置useAsyncSend=true
一次并让它适用于所有客户,这可能是值得的,这取决于你的情况。