在jms中,我们有MessageLister,onMesssage接收消息。那为什么我们需要MessageDrivenBean?这已经过时了吗?在javaee6 MDB api中,他们说从ejb 3.0开始,它没有被使用。 mdb和jms有什么区别?
什么是Jms中的同步调用?是响应立即返回给调用者? Jms中是否保证同步调用?
答案 0 :(得分:1)
首先让我们对休息产生误解:EE6 Javadoc for the MessageDrivenBean interface州
从EJB 3.0开始,不再需要消息驱动的bean类 实现此接口 。
这是因为从EJB 3.0开始,您通常会使用@MessageDriven
注释来声明MDB,并使用@Resource
注释来获取其MDC。像这样,from the official tutorial
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationLookup",
propertyValue = "jms/MyQueue"),
@ActivationConfigProperty(propertyName = "destinationType",
propertyValue = "javax.jms.Queue")
})
public class SimpleMessageBean implements MessageListener {
@Resource
private MessageDrivenContext mdc;
static final Logger logger = Logger.getLogger("SimpleMessageBean");
虽然经常一起使用,但MDB和JMS完全不同:
MDB可以与其他消息传递技术一起使用,显然JMS可以在MDB之外使用。在我看来,在Java EE应用程序中使用MDB的要点是易于实现可以识别事务的消息端点。
在同步消息传递系统系统中,发送端将等待传递消息。但是,在异步系统中,发送方立即返回,而不等待实际发送。这导致系统两端之间的耦合更加松散,并且由于接收器故障或过载而导致发送方锁定/减速的风险为零。