消息驱动Bean - 何时使用

ane*_*rgy 5 java java-ee ejb-3.0

JavaEE的6教程说,你不能用Session Bean的异步方式,那么什么是@Asynchronous注解的EJB 3.1的目的,这篇文章说,你可以使用它.有人可以解释何时使用Message Driven Bean?

谢谢!

Rom*_*eau 6

一旦消息在队列中(假设队列是持久的),消息Bean就保证了传递,它是持久的,即使在崩溃的情况下,在启动时MessageBean也会处理它.在异步会话Bean的情况下,如果发生崩溃,您丢失了消息,除非您自己处理.

在教程中,我不同意:

Session beans allow you to send JMS messages and to receive them synchronously, but not asynchronously.
Run Code Online (Sandbox Code Playgroud)

将消息放入队列是一种同步操作(对于任何方法调用都是如此),语义实际上是异步的,因为您将消息放在队列中然后忘记了它.我猜他们这里的意思是你可以从会话bean发送一条消息,然后同步等待响应(可能大部分都不是一个好主意)

要回答有关何时使用消息Bean的问题,您可以使用它们在队列中侦听异步消息,然后使用消息中的信息调用您需要调用的任何逻辑.