ActiveMQConnectionFactory 发送超时

IAm*_*aja 6 java configuration activemq-classic activemq-cpp

根据ActiveMQ 站点上的此配置页面,该connection.sendTimeout属性为:

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

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

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

提前致谢!

Tim*_*ish 5

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

消息以同步模式发送,要么是因为连接配置为 alwaysSyncSend=true,要么是因为 MessageProducer 以设置为 Persistent 的传递模式发送。

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