Java ActiveMQConnectionFactory发送超时

Java ActiveMQConnectionFactory发送超时,java,configuration,activemq,activemq-cpp,Java,Configuration,Activemq,Activemq Cpp,根据ActiveMQ站点上的说明,connection.sendTimeout属性为: 等待消息发送响应的时间,默认值为零表示永远等待。永远等待允许代理对来自此客户端的消息进行流控制,如果它是一个快速生产者,或者没有消费者,那么代理将在不降低生产者速度的情况下耗尽内存。不会影响Stomp客户端,因为代理会确认发送。(自ActiveMQ CPP 2.2.1起) 我很难理解这意味着什么(以及sendTimeout属性的真正含义/作用): 什么是“消息发送”对象 为什么ActiveMQ会等待响应?它

根据ActiveMQ站点上的说明,
connection.sendTimeout
属性为:

等待消息发送响应的时间,默认值为零表示永远等待。永远等待允许代理对来自此客户端的消息进行流控制,如果它是一个快速生产者,或者没有消费者,那么代理将在不降低生产者速度的情况下耗尽内存。不会影响Stomp客户端,因为代理会确认发送。(自ActiveMQ CPP 2.2.1起)

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

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

提前谢谢

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

消息以同步模式发送,这可能是因为连接配置为alwaysSyncSend=true,也可能是因为MessageProducer在发送时将传递模式设置为Persistent


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

感谢@Time Bish(+1)-快速跟进:如果Apache Camel是这个等式中的客户机,我如何判断我是否无意中将其设置为“同步模式”?换句话说,我如何判断
ActiveMQConnectionFactory#isAlwaysSyncSend
是真的,还是
MessageProducer
是持久的?再次感谢!这是一个关于不同编程语言中不同主题的不同问题,可能值得创建一个新主题。