通过前两篇文文章
【进阶EJB】深入探讨三种Bean(一)——Session Bean
【进阶EJB】深入探讨三种Bean(二)——Entity Bean
已经介绍了前两种Bean,今天我们继续介绍第三种Bean——MessageDriven Bean。
要说MessageDriven Bean前就先要介绍一下JMS(Java Message Service),JMS是Java消息服务,它是一个与具体平台无关的API(Application Program Interface 应用程序接口),是Java平台上有关面向消息中间件的技术规范,它便于消息系统中的Java应用程序进行消息交换、并且通过提供标准的产生、发送、接受消息的接口简化企业应用的开发。而MessageDriven
Bean就是基于JMS消息,只能接受客户端发送的JMS消息然后处理。知道了这些我们继续了解MessageDriven Bean。
MessageDriven Bean即消息驱动Bean,它是设计用来专门处理基于消息请求的组件。消息驱动Bean具有处理大量并发消息的能力,并且如果一个消息执行很长时间而执行结果无需向用户实时反馈时,也非常适合使用消息驱动Bean,它能够避免客户端长时间等待一个方法调用直到返回结果。比如订单成功后向用户发送一封电子邮件或短信等。
JMS有两种工作模型:P2P点对点模型和Pub/Sub发布订阅模型。
P2P(Point-to-Point)点对点模型,什么是P2P模型?P2P模型中有发送者、接收者和消息队列。每个消息只有一个消费者,即消息一旦被消费,消息就不会再在消息队列中;消息的发送者和接收者不存在时间上的依赖性,也就是说当发送者发送了消息之后,不论接收者有没有正在运行,都不影响消息被发送到队列中;接收者在成功接收了消息之后,需要给队列应答成功;每个消息都被发送到一个特定的消息队列中,接收者从消息队列中获取消息,消息队列保留着消息,直到它们被消费或超时。
什么时候适合用P2P?就是如果你希望发送的每一个消息都能够被成功处理的话,那么就需要应用P2P模型了。
Pub/Sub(Publish/Subscribe)发布/订阅模型,什么是Pub/Sub发布/订阅模型?Pub/Sub模型中有主题、发布者、订阅者。客户端发送消息到主题,多个发布者将消息发送到主题,系统将这些消息传递给多个订阅者。其中每个消息可以有多个消费者;发布者和订阅者之间有时间上的依赖性,针对某个主题的订阅者,他们必须建立一个订阅之后才能消费发布者的消息,并且为了消费消息,订阅者必须保持运行的状态。
什么时候适合用Pub/Sub?如果你希望发送的消息可以不被做任何处理,或者被一个消费者处理,或者可以被多个消费者处理的话,可以采用Pub/Sub模型。
今天这篇文章就介绍到这里,通过前几篇关于EJB的文章,我们对EJB有了一个大致的认识,在接下来的ITOO项目中我们会使用EJB,所以期待在实践中对EJB有一个更为全面的认识。有关EJB的文章先暂时介绍到这里,在项目中对EJB有新的认识我会及时更新在博客中。接下来我会写一些关于SprigMVC的文章,敬请期待吧!