`
csevan
  • 浏览: 61810 次
  • 性别: Icon_minigender_1
  • 来自: 长沙市
文章分类
社区版块
存档分类
最新评论
阅读更多
JMS Java Message Service)是由SUN开发的一套API,它为开发者提供一套访问MOMMessage-Oriented Middleware:面向消息中间件)的标准方法。

JMS
分为两种消息域PTP(点对点)和Pub/Sub(发布/订阅)。PTP消息被产生者放入到一个队列中,消费者则从小消息列队中取走消息,消息一担取走,消息就从队列中移除。Pub/Sub消息和PTP最大的不同在于发布者发布一条消息后可以发送给所有订阅者,所有订阅者都拥有处理某一条消息的机会。(如图1)
                                    (图1
                
发布者A                   发布者B
                        |                                 |
    --------MOM   消息中间件-----------------------
   |                 
娱乐/音乐             it/管理              |
   ________________________________
               订阅者A          订阅者B     订阅者(都能享受上面的服务,不用理会谁发布的)
 JMS的一些重要接口
ConnectionFactory :创建一个受管理对象
Connection 
连接到提供者的活动连接
Destination
一个封装消息目标地址的受管理对象,如消息的来源地和发送滴,根据消息域的不同有两个接口:Queue Topic,前者对应PTP消息的目标地址,后者对应Pub/Sub消息的目标地址。
Session
:发送和接受消息的单线程环境。(即一次会话)
MessageProducer
:用于发送消息
MessageConsumer
:用于接收消息
JMS高级接口与特定域接口(位于javax.jms包中)  

高级接口
PTP域子接口
PUB/SUB域子接口
ConnectionFactory
QueueConnectionFactory
TopicConnectionFactory
Connection
QueueConnection
TopicConnection
Destination
QueueDestination
TopicDestination
Session
QueueSession
TopicSession
MessageProducer
QueueMessageProducer
TopicMessageProducer
MessageConsumer
QueueMessageConsumer
TopicMessageConsumer

一个典型的JMS程序要经过以下步骤才能开始创建和使用消息
1、通过JNDI查询ConnectionFactory
2
、用ConnectionFactory创建一个Connection
3
、用Connection创建一个或多个Session
4
、通过JNDI查询一个或多个Destination
5
、用SessionDestination创建对应的MessageProducerMessageConsumer
6
、启动Connection
JMS消息结构
 
JMS根据不同应用的用途定义了多种消息类型,由Message接口派生而来,一个Message由Header、Properties和Body三个部分组成。
 
Header是一组标准键值字段,客户端和提供者都用它来标识和路由消息。
Properties用于弥补Header的不足,可以通过手工设置其他的属性,Message提供了set<Type>Property(String name)和get<Type>Property()方式来让开发者任意定义属性。
Body消息正文,包括了发送给其他程序的消息内容,根据消息体内容的不同,JMS拥有5个消息类型,并分别通过Message的5个子接口来描述。

消息类型
说明
TextMessage
消息是一个字符
ObjectMessage
消息是一个实现了Serializable接口的对象
MapMessage
消息是一个MAP,包括一组键值对元素,键位一个字符,值为任意对象
BytesMessage
消息是一个二进制数组
StreamMessage
消息是一组JAVA原始类型数据,这些数据通过标准流操作按顺序进行填充和读取

 
消息收发的机制
JMS事务使用了Session对它进行操作,分别拥有支持事务语义的3个方法,通过这些方法启动,提交和回滚一个事务,这些方法分别是begin()、commit()和rollback()。
 
消息确认是接收者在成功接收到消息后,将一个回执发送给MOM,告之已经成功接收到一种通知机制。确认方式有三种分别是:
1、 Session.AUTO_ACKNOWLEDGE:在完成接收消息时,Session自动发送一个确认回执。
2、 Session.CLIENT_ACKNOWLEDGE:由客户端程序通过手工调用Message.acknowledge()方法显示确认接收。
3、 Session.DUPS_OK_ACKNOWLEDGE:让Session延迟发送确认回执。
例如:创建一个不需事务,自动确认的session方式
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
 
消息选择是一种选择机制,类似于SQL的查询条件。
 
发送消息例子:
 

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.InitialContext;
import javax.jms.Destination;
 
publicclass MessageSender {
   
    /**
     *发送方法
     *@parammsgText
     */
    publicvoid send(String msgText){
      
       // 获取jms连接
       Connection connection = null;
      
       try {
           // 获取JNDI上下文
           InitialContext ctx = new InitialContext();
           ConnectionFactory cFactory = (ConnectionFactory)ctx.lookup("jndi/jmsConn");
          
           // 获取Destination 目标地址
           Destination dest = (Destination)ctx.lookup("jndi/dest");
           ctx.close();
          
           // 获取一个MOM的连接
           connection = cFactory.createConnection();
          
           // 创建JMS会话
           Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
          
           // 创建一个指定特定目标地址的消息发送者
           MessageProducer sender = session.createProducer(dest);
          
           // 建立Body内容
           TextMessage message = session.createTextMessage(msgText);
          
           // 发送给服务器
           sender.send(message);
          
       } catch (Exception e) {
           e.printStackTrace();
       } finally {
           try {
              connection.close();
           } catch (Exception e) {
              e.printStackTrace();
           }
       }
    }
}
 

 
接收消息例子:
 

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.InitialContext;
 
publicclass MessageReceiver {
   
    /**
     *接收方法
     */
    publicvoid receive(){
       Connection connection = null;
      
       try {
           // 创建JNDI上下文
           InitialContext ctx = new InitialContext();
           ConnectionFactory cFactory = (ConnectionFactory)ctx.lookup("jndi/jmsConn");
          
           // 获取目标地址信息
           Destination dest = (Destination)ctx.lookup("jndi/dest");
           ctx.close();
          
           // 获取连接
           connection = cFactory.createConnection();
          
           // 获取连接对话
           Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
          
           // 创建一个指向特定目标地址的消息消费者
           MessageConsumer receiver = session.createConsumer(dest);
          
           // 接收发送请求中的消息信息
           TextMessage textMsg = (TextMessage)receiver.receive();
          
           System.out.println("获取内容:" + textMsg.getText());        
       } catch (Exception e) {
           e.printStackTrace();
       } finally {
           try {
              connection.close();
           } catch (JMSException e) {
              e.printStackTrace();
           }
       }
    }
}
 

 
分享到:
评论
1 楼 xurichusheng 2011-12-24  
jndi/jmsConn和jndi/dest是怎么配置的?

相关推荐

    JMS学习笔记精心总结

    **JMS学习笔记精心总结** Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用间异步通信的一种标准接口。它允许应用程序创建、发送、接收和读取消息,使得应用程序能够在不直接连接的情况下...

    JMS学习笔记(一)——JMS简介安装ActiveMQ

    **JMS学习笔记(一)——JMS简介与ActiveMQ安装** Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用间异步通信的标准接口。它为应用程序提供了一种标准的方式,用来创建、发送、接收和读取...

    JMS学习笔记

    **JMS学习笔记** Java消息服务(Java Message Service,简称JMS)是Java平台中用于在分布式环境中交换异步消息的标准API。它提供了一种可靠的消息传递机制,使得应用程序可以在不互相依赖的情况下进行通信,从而...

    jms学习笔记jms学习笔记

    本文主要探讨的是消息中间件(Message-Oriented Middleware,简称MOM),特别是在Java消息服务(Java Message Service,JMS)的学习笔记。 JMS是Java平台上的一个标准API,用于在分布式环境中进行异步消息传递。它...

    JMS相关,教程,例子,学习笔记

    通过阅读**jms学习笔记.docx** 和 **JMS例子.docx**,你可以深入理解JMS的使用方式,获取实践经验。而 **JMS教程.pdf** 和 **基于XML和JMS的异构数据交换集成的研究.pdf** 则提供了理论基础和高级应用场景的讲解,有...

    JavaEE5学习笔记03-JMS介绍与使用

    例如,在消息处理过程中,Hibernate可以用于将消息数据转换为数据库记录,或者从数据库检索数据来响应消息。 #### 总结 JMS是Java EE中一个强大而灵活的组件,用于实现企业级应用中的消息传递。通过理解JMS的基本...

    ActiveMQ学习笔记(二) JMS与Spring

    在本篇ActiveMQ学习笔记中,我们将探讨JMS(Java Message Service)与Spring框架的集成。JMS是一种标准API,用于在分布式环境中进行异步消息传递,而Spring框架则为开发人员提供了强大的依赖注入和管理服务的能力。...

    activeMQ_JMS学习资料

    ### ActiveMQ_JMS学习资料深度解析 #### 一、JMS基本构件详析 ##### 连接工厂(Connection Factory) 连接工厂是JMS架构中的关键组件,负责创建与JMS服务提供商之间的连接。例如,ActiveMQ提供了`...

    JMS入门小例子以及weblogic安装,并且在weblogic中配置JMS服务

    JMS(Java Message Service)是Java平台中用于创建和管理消息传递系统的一...通过这个过程,开发者可以学习到如何在WebLogic这样的企业级应用服务器上构建可靠的消息传递系统,以及如何使用Spring框架进行集成和管理。

    jms英文书小合集

    **Java消息服务(Java Message Service,简称JMS)**是一种标准的应用程序接口(API),它允许应用程序在分布式环境中...无论你是初学者还是经验丰富的开发者,这个英文书合集都能为你的JMS学习之旅提供宝贵的资料。

    利用soapUI3.5测试JMS消息

    在IT行业中,测试是软件开发过程中的重要环节,确保了产品的质量和稳定性。当我们涉及到分布式系统和消息...通过不断的实践和学习,你可以更加熟练地运用soapUI来测试和调试JMS消息,从而提升整个系统的可靠性和效率。

    基于消息中间件的学习记录以及源码示例【JMS、AMQP、ActiveMQ、RocketMQ】.zip

    本文将深入探讨基于消息中间件的学习记录,包括Java消息服务(JMS)、先进消息队列协议(AMQP)以及两个流行的开源实现:ActiveMQ和RocketMQ。 首先,Java消息服务(JMS)是一种标准API,用于在Java应用程序之间...

    jms-appender-5.0.1.zip

    而Appender是日志框架(如Log4j或Logback)的一部分,它的功能是将日志事件记录到不同的目的地,如控制台、文件、数据库等。 在这个特定的压缩包"jms-appender-5.0.1.zip"中,我们可以推测它包含了一个日志处理的...

    JMS578-硬盘盒AD +PCB+原理图

    标题中的“JMS578-硬盘盒AD +PCB+原理图”表明这是一个关于硬盘盒设计的项目,其中包含了电路板(PCB)的设计、布局以及相关的原理图。这个项目特别提到了“SATA2.5”,意味着它支持的是2.5英寸的Serial ATA接口,...

    RocketMQ学习笔记 1

    RocketMQ学习笔记 1是关于Apache RocketMQ的学习笔记,涵盖了RocketMQ的基本概念、架构、消息模型、Producer和Consumer的基本概念、JMS规范等知识点。 1. 消息模型 在RocketMQ中,消息模型是指消息的生产、存储和...

    SpringMVC+JMS(ActiveMQ)整合的Demo

    开发者可以通过运行和调试这个Demo,学习如何在自己的应用中实现类似的功能,提升系统的异步处理能力和可扩展性。 总之,SpringMVC+JMS(ActiveMQ)整合的Demo是一个实用的教学工具,它涵盖了现代企业级应用中常见...

    JAVA学习笔记————————

    在深入探讨JAVA学习笔记之前,我们首先理解一下JAVA这一编程语言的重要性。JAVA,由Sun Microsystems公司(现已被Oracle收购)于1995年推出,是一种面向对象的、跨平台的编程语言,以其“一次编写,到处运行”的特性...

    J2EE学习笔记 对学习非常有帮助

    **J2EE学习笔记概述** J2EE(Java 2 Platform, Enterprise Edition)是Java平台的一个版本,专门针对企业级应用开发。它提供了一个全面的框架来构建、部署和管理多层、分布式、跨平台的企业应用程序。J2EE学习笔记...

Global site tag (gtag.js) - Google Analytics