2017-09-01 153 views
0

MDB通过Java EE容器调用onMessage()方法传递消息。消息驱动Bean可以同步处理JMS消息吗?

这允许客户端(MDB)不需要在主题或队列上调用接收的异步消费,而是容器/提供者将自动将消息传递给它。

无论如何我们可以使用MDB进行消息的同步消费吗? 我们可以在PostConstruct方法或某个目的地的onMessage方法中创建一个连接,并调用receive()?

如果这个大写字母是可能的,那么我们可以从它推断出什么?那就是MDB可以同时和异步地处理消息吗?

回答

0

我假定你知道:oracle tutorial to mdbs

一旦bean已经被触发,它可以使用JMS接口上的任何资源,只要你想。您可以收到更多消息,您可以在该主题上添加更多消息,等等。

但是,您依赖最初由主题或队列上的消息触发,MDB已定义。 如果您希望在消息放入队列中时立即触发MDB,为什么不直接在Bean上调用onMessage或类似的东西?

If this upper case is a possibility then what can we deduce from 
it? That is MDB can handle messages both synchronously and asynchronously? 

MDB最初是异步触发的。这是MDB的主要特征。之后它作为一个几乎正常的bean做什么对此没有影响。

更多内容: MDB是同步还是异步使用的问题取决于底层的消息传递框架。在EJB中它是异步定义的。 MDB通常在另一个线程中调用,而不是最初发送消息的客户端。例如,mockrunner-jms是一个内存消息传递框架,可以在尝试测试消息传递时使用,可以配置,在同一线程中同步调用消费者。