6

根据ActiveMQ 站点上的这个配置页面connection.sendTimeout,属性是:

等待消息发送响应的时间,默认值零表示永远等待。如果代理是快速生产者或没有消费者,那么永远等待允许代理对来自该客户端的消息进行流控制,这样代理如果不减慢生产者的速度,就会耗尽内存。不影响 Stomp 客户端,因为发送由代理确认。(从 ActiveMQ-CPP 2.2.1 开始)

我很难解释这意味着什么(以及该sendTimeout属性的真正含义/它的作用):

  • 什么是“消息发送”对象?
  • 为什么 ActiveMQ 会等待响应?它不是在 JMS 连接的服务器端吗?它不应该等待请求吗?
  • 它实际上超时是什么?什么时候应该使用它?

提前致谢!

4

1 回答 1

5

超时影响客户端向 Broker 发送消息。在发送不是异步的情况下,客户端等待代理返回响应,指示消息已被接收并添加到消息存储中。在某些情况下,如果由于已达到其预设内存限制之一,Broker 已启用生产者流控制,这可能会阻塞很长时间。如果客户端应用程序不能容忍长时间等待发送,它可以配置此超时,以便 MessageProducer::send 不会无限期地阻塞。

消息以同步模式发送,因为 Connection 配置为 alwaysSyncSend=true,或者因为 MessageProducer 发送时将传递模式设置为 Persistent。

通常,如果您已为代理配置了与您的用例相匹配的限制,则不需要使用此设置。

于 2013-03-09T22:25:21.797 回答