2

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

4

2 回答 2

1

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

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

于 2013-05-16T03:19:37.387 回答
1

JMS 只是一个 API。它没有指定任何线级协议。因此,您无法真正判断客户对经纪人的行为方式。据我们所知,它可以使用归巢鸽。好吧,也许不是,但是像 WebSphere MQ 和 ActiveMQ 这样的代理都提供内存传输以及基于 TCP 的服务。

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

在使用 TCP 时,只要有实时连接,就不需要轮询。代理可以很容易地通知客户端在客户端休眠时发布了一条新消息,反之亦然。

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

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

于 2013-05-16T21:54:48.133 回答