在ActiveMQ / HornetQ中使用(弹簧或ejb)消息侦听器容器接收消息时,幕后发生了什么?


经纪人是否向消费者推送消息?如果是这样,消费者如何注册
自己去经纪?
还是消费者在队列中轮询消息?如果是这样,为什么每个队列(在管理控制台中)都有一个“消费者编号”字段来显示该队列的已注册使用者的数量?


奥莱利书的This link说:


  传统上,p2p消息传递模型是pull-p
  基于轮询的模型,从队列中请求消息
  而不是自动推送给客户端。 (JMS
  规范没有具体说明p2p和pub / sub
  模型必须实现。任何一种都可以使用推或拉,但是在
  至少从概念上讲pub / sub是push,而p2p是pull)。

最佳答案

您无需说明协议,因为ActiveMQ和HornetQ是多协议代理,因此确切的实现可能有所不同。但是,除了基于HTTP / REST的协议以外,大多数协议都会将消息推送到客户端。没有在线协议级别的推送策略,就不可能实现高吞吐量。

应用程序级别的API允许“轮询”,即JMS MessageConsumer.receive,但这实际上只是一种“休眠直到消息被推送”的机制。

10-06 03:43