`
jianchen
  • 浏览: 343011 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java消息服务(Java Message Service)

    博客分类:
  • J2EE
阅读更多

Java消息服务 (java Message Service,简称JMS)是用于访问企业消息系统的开发商中立的API。企业消息系统可以协助应用软件通过网络进行消息交互。

JMS的编程过程很简单,概括为:应用程序A发生一条消息到消息服务器的某个目的地,然后消息服务器把消息转发给应用程序B。因为应用程序A和应用程序B没有直接的代码关联,所以两者实现了解耦。

JMS中的消息
消息传递系统的中心就是消息。一条Message由三个部分组成:
头,属性和主体。

消息有下面几种类型,他们都是派生自Message接口。
StreamMessage:一种主体中包含Java基元值流的消息。其填充和读取均按顺序进行。
MapMessage:一种主体中包含一组名-值对的消息。没有定义条目顺序。
TextMessage:一种主体中包含Java字符串的消息(例如,XML消息)
ObjectMessage:一种主体中包含序列化Java对象的消息
BytesMessage:一种主体中包含连续字节流的消息。

消息的传递模型
JMS支持两种消息传递模型:点对点,发布/订阅。这两种消息传递模型非常相似,但有以下区别。
1,点对点(point-to-point,简称PTP)
PTP消息传递模型规定了一条消息只能传递给一个接收方。采用javax.jms.Queue表示。

2,发布/订阅(publish/subscribe)
Pub/sub消息传递模型允许一条消息传递给多个接收方。采用javax.jms.Topic表示。

这两种模型都通过扩展公用基类来实现。例如:javax.jms.Queue和javax.jms.Topic都扩展自javax.jms.Destination类。


配置目标地址
开始JMS编程前,我们需要先配置消息到达的目标地址,因为只有目标地址存在了,我们才能发送消息到这个地址。由于每个应用服务器关于目标地址的配置方式都有所不同,下面以jboss为例,配置一个queue类型的目标地址。

  <?xml version="1.0" encoding="UTF-8"?>
<server>
        <mbean code="org.jboss.mq.server.jmx.Queue" name="jboss.mq.destination:service=Queue,name=foshanshop">
                <attribute name="JNDIName">queue/foshanshop</attribute>
                <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>
        </mbean>
</server>



Jboss使用一个XML文件配置队列地址,文件的取名格式应遵守*-service.xml
<attribute name="JNDIName">属性指定了该目标地址的全局JNDI名称。如果你不指定JNDIName属性,jboss会为你生成一个默认的全局JNDI,其名称由“queue”+“/”+目标地址名称组成。另外在任何队列或主题被部署之前,应用服务器必须先部署Destination Manager Mbean,所以我们通过<depends>节点声明这一依赖。

采用消息驱动Bean (Message Driven Bean)接收消息
消息驱动Bean(MDB)是设计用来专门处理基于消息请求的组件。它和无状态session bean一样也使用了实例池技术,容器可以使用一定数量的bean实例并发处理成百上千个JMS消息。正因为MDB具有处理大量并发消息的能力,所以非常适合应用在一些消息网关产品。如果一个业务执行的时间很长,而执行结果无需实时向用户反馈时,也很适合使用MDB。如订单成功后给用户发送一封电子邮件或发送一条短信等。

一个MDB通常要实现MessageListener接口,该接口定义了onMessage()方法。Bean通过它来处理收到的JMS消息。

package javax.jms;
public interface MessageListener{
        public void onMessage(Message message);
}
 


当容器检测到bean守候的目标地址有消息到达时,容器调用onMessage()方法,将消息作为参数传入MDB。MDB在onMessage()中决定如何处理该消息。你可以使用注释指定MDB监听哪一个目标地址。当MDB部署时,容器将读取其中的配置信息。

分享到:
评论

相关推荐

    JMS消息服务代码(java message service)

    Java Message Service(JMS)是Java平台中用于创建、发送、接收和读取消息的应用程序接口。它提供了一种标准的方式来解耦应用程序之间的通信,使得它们可以异步地交换信息,提高了系统的可扩展性和可靠性。在JMS中,...

    Java+Message+Service+JMS+java消息服务

    Java Message Service(JMS)是Java平台中用于创建、发送、接收和读取消息的应用程序接口(API)。它提供了一种标准的方式,让分布式系统中的不同组件之间可以通过异步通信来交换信息。JMS允许应用程序在不受网络...

    Java Message Service 基础教程

    本教程向您介绍了 Java 消息服务(Java Message Service,JMS)概述,并提供了使用它开发程序的基本知识。Sun Microsystems 开发 JMS 是为 Java ?程序访问企业消息传递系统、也称面向消息的中间件(MOM)提供一种...

    java消息服务(第二版)清晰中文完整版

    Java消息服务(Java Message Service,简称JMS)是Java平台中的一个API,它为应用程序提供了创建、发送、接收和读取消息的功能。JMS设计的主要目的是让分布式系统能够通过异步通信模型来进行交互,这种方式有助于...

    JMS教程 java message service

    Java消息服务(JMS,Java Message Service)是Java平台中用于在分布式系统中进行可靠的消息传递的标准API。它提供了一种解耦应用程序的方式,使得不同的组件可以异步通信,即使它们可能在不同的时间运行,或者在不同...

    Java Message Service

    Java Message Service (JMS) 是Java平台中用于创建、发送、接收和读取消息的标准API。它为分布式环境中的应用程序提供了可靠的消息传递机制,确保消息的有序性和持久性,同时也支持发布/订阅和点对点两种消息模式。...

    Java消息服务的消息中间件的研究与设计

    特别是Java消息服务(Java Message Service,简称JMS)作为一套规范,为开发人员提供了统一的接口来处理分布式系统中的消息传递问题。 #### 二、JMS规范概述 JMS是由Sun Microsystems及其合作伙伴提出的一套规范,...

    java 消息服务(第二版)源码

    Java消息服务(JMS,Java Message Service)是Java平台中用于创建、发送、接收和读取消息的标准API。它提供了一种可靠的消息传递机制,允许分布式系统中的组件进行异步通信。在Java应用中,JMS常用于解耦组件,使得...

    Java消息服务 pdf

    Java消息服务(Java Message Service,JMS)是Java平台中用于企业级应用集成(Enterprise Integration Patterns,EIP)的一种标准API,它定义了应用程序如何创建、发送、接收和读取消息的标准接口。JMS允许分布式...

    java消息服务(第二版)

    Java消息服务(JMS,Java Message Service)是Java平台中用于企业级应用间通信的一种中间件技术,它为分布式环境中的应用程序提供了一种可靠的消息传递机制。在《Java消息服务(第二版)》这本书中,读者可以深入...

    msmq.rar_java msmq_java 消息队列_java消息队列_msmq_消息队列

    在Java中,我们可以使用Java Message Service (JMS) API来与MSMQ进行通信。JMS提供了一个标准接口,可以访问各种消息队列服务器,包括MSMQ。要使用Java连接到MSMQ,你需要一个支持MSMQ的JMS提供者,例如Apache ...

    中文java message service

    Java 语言的客户端和Java 语言的中间层服务必须能够使用这些消息系统。JMS 为Java 语言程序提供了一个通用的方式来获取这些系统。 JMS 是一个接口和相关语义的集合,那些语义定义了JMS 客户端如何获取企业消息产品 ...

Global site tag (gtag.js) - Google Analytics