JMS消息服务
消息机制可以建立组件间的松散耦合关系。
消息机制允许组件发送消息并由其他组件读取。
有两种基本的消息模型——点对点模型和发布/订阅模型。点对点消息模型允许组件将消息发送到一个消息队列中。一个消息消费者是指处理消息的目标组件。
在点对点模型中,只有一个客户处理单个消息;服务器保留没有被消费的消息。
发布/订阅模型允许组件将消息发布到一个主题上。对发布到特定主题的消息感兴趣的组件可以订阅该主题。
当一个发布者将一条消息发布到给定的主题上后,当前的所有订阅者都会收到此消息。
在发布/订阅模型中,零个或多个订阅者可以消费一个已发布的消息。
一条消息包括一个消息头、消息属性(可选的)和一个消息体(也是可选的)。消息头包含目的地和发送时间等消息。
消息属性允许消息的接收者选择他想接收的消息模型,消息的发送者可以设置这些属性。消息接收者使用消息选择器来过滤消息,过滤操作是在服务器端完成的。
消息驱动bean是一种与MOM很好地集成在一起的企业级bean。
EJB容器可以使用任何一个消息驱动bean的实例来处理发送的给定消息队列或主题上的消息。通过使用消息驱动bean,组件可以异步地接收消息。
Java消息服务(JMS)API。JMS标准化了企业级的消息机制,并为点对点模型和发布/订阅模型提供了API。
JMS提供了五种消息类型——BytesMessage、MapMessage、ObjectMessage、StreamMessage和TextMessage。
服务器管理员创建连接工厂、消息队列和主题。
QueueConnectionFactory可以让用户创建一个QueueConnection。
QueueConnection创建QueueSession。QueueSession继而创建QueueSender或QueueReceiver。
当消息队列的接收者或主题的订阅者接收到一条消息时,消息监听器会处理此消息。
MessageListener接口声明了onMessage方法,该方法将在新消息到来时调用。
客户可以进行两种订阅——非持久的和持久的。非持久的订阅只能在激活订阅过程的时候收到消息。
持久的订阅在不激活订阅过程的时候也可以接收到消息,当订阅过程非活动时,服务器会保留发送到主题上的消息,并在订阅过程重新激活时发送给订阅者。注意,如果指定了一个消息选择器来过滤消息,那么服务器只会保留满足选择器要求的消息。
由服务器创建的TopicConnectionFactory可以创建TopicConnection。TopicConnection接着可以创建TopicSession。TopicSession继而可以创建TopicPublisher或TopicSubscriber。
主题订阅者(或消息队列接收者)可以利用消息选择器来过滤消息。如果客户指定一个消息选择器,那么服务器只会给客户发送满足过滤要求的消息。消息选择器的语法基于SQL92。
消息驱动的EJB或消息驱动bean是企业级JavaBean2.0版中新加入的一种企业级JavaBean类型,它是Java2企业版的1.3版本的一部分。
消息驱动bean能够处理发送到消息队列或主题上的JMS消息。
当接收到一条消息时,EJB容器使用任何一个可用的消息驱动bean的实例来处理该消息。
由于任何消息驱动的EJB实例都可能使用,所以任何消息驱动的EJB都不能指定特定的客户,也不能保留客户的状态信息。
任何给定的EJB实例可以处理从多个客户发来的消息。
不同于会话EJB和实体EJB(它们需要提供接口),消息驱动bean只要求开发者提供bean的实现类。
MessageDrivenBean接口声明了setMessageDrivenContext方法,并指定消息驱动上下文应该存储在实例变量messageDrivenContext中。