【问题标题】:How JMS client notice about new messageJMS 客户端如何通知新消息
【发布时间】:2013-05-17 05:54:48
【问题描述】:

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

【问题讨论】:

  • 客户端与代理创建会话。然后代理将向客户端发送消息。客户端不需要轮询代理,我怀疑任何 JMS 实现都会这样做。
  • 你能介绍一下协议代理用来发送消息的情况吗?客户端和代理是否总是维护一个套接字来一起通信?
  • JMS 是更高级别的协议。代理生产者和客户端如何通信取决于实现。只要代理符合会话合同,它就可以通过 UDP、TCP、SCTP、电子邮件或任何它认为最好的方式进行通信。
  • 阅读规范,JMS 仅在 TCP 上发送消息:连接有多种用途: • 它封装了与 JMS 提供者的开放连接。它通常表示客户端和提供者的服务守护进程之间的开放 TCP/IP 套接字
  • 当有输入流(由代理发送)进入其套接字端口时,客户端可能会收到一条新消息通知。我不确定。

标签: java jms


【解决方案1】:

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

尽管AMQP 作为有线协议标准即将出现,但大多数供应商都有自己的专有协议(但远不是所有供应商都开始关注它)。

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

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

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

【讨论】:

  • 我同意。实际上,我的项目将 ActiveMQ 配置为在与 Web 应用程序相同的 JVM 中运行
  • @Petter:你提到了When talking TCP there is no need to poll as long as there is a live connection going on.!我不明白这怎么可能。不是所有接收都是通过阻塞或轮询实现的吗?我同意你其余的回答。
  • 嗯.. 是的,如果你需要把它带到那个水平。 JMS 应用程序几乎不是单线程的,连接中通常有一个或几个线程在“幕后”执行这种阻塞操作。无论如何,从应用程序的角度来看并不重要。
  • @PetterNordlander:“JMS 只是一个 API”,你的意思是 JMS 只是一个规范,对吗? API 似乎意味着可以按原样使用。
  • Oracle 和 Wikipedia 都将 JMS 定义为 API,所以我只是使用了同一个词。我不同意 - API 一定不能准备好使用,它只是关于如何编码的协议。
【解决方案2】:

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

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

【讨论】:

  • 我同意没有对代理的同步/异步请求。我怀疑客户端只有一个事件循环来监听其套接字以了解是否有新消息
  • @bnguyen82, Consumer 甚至不需要循环。 Broker 可以让consumer 知道消息何时到达注册了consumer 的专用Queue
  • “让它知道”如何?错误,通过发送消费者必须阅读的内容。
  • @EJP,抱歉没听懂!请详细说明!
猜你喜欢
  • 2010-12-03
  • 1970-01-01
  • 1970-01-01
  • 2012-01-20
  • 1970-01-01
  • 1970-01-01
  • 2012-05-24
  • 2021-06-04
  • 2015-07-05
相关资源
最近更新 更多