JMS客户端如何注意新消息

时间:2013-05-16 02:10:25

标签: java jms

我正在学习JMS并想知道JMS客户端(例如MessageListener)如何注意它注册的队列中的新消息。是否经常通过TCP向代理发送请求以查看是否有新消息?如果是这样,这个请求是同步还是异步?

2 个答案:

答案 0 :(得分:1)

1)首先,JMS没有名为绝对同步消息的内容。你绝对可以通过实现同步服务方法来实现所谓的JMS Synchronous messaging,但事实上它似乎只是模仿Synchronous messaging。实际上它也是Async Messaging

2)从技术上讲,JMS Server / Broker通过专用的队列消息发送到Message ConsumersBroker只是将消息传递给Message Consumer's onMessage()方法。然后Container执行onMessage()方法。

答案 1 :(得分:1)

JMS只是一个API。它没有指定任何线路级协议。所以你无法真正告诉客户端如何与代理商合作。对于我们所知道的,它可以使用归巢的piegon。好吧,也许不是,但像WebSphere MQ和ActiveMQ这样的经纪人都提供内存传输和基于TCP的。

大多数供应商都拥有自己的专有协议,即使AMQP作为有线协议标准可见(但远非所有供应商都开始关注它)。

在谈论TCP时,只要有实时连接,就不需要轮询。代理可以轻松地通知客户端在客户端休眠时发布了新消息,反之亦然。

然而,常见的方法是实际进行民意调查。而是在较长的间隔(秒)内轮询consumer.receive(TIMEOUT);。这使得在spring等框架中使用分布式事务成为可能。代理仍然会根据需要向客户端发送实际的TCP消息。

如果不是这样,那么JMS / Messaging就不会是如此快速,广泛的psread和可扩展技术