`
isiqi
  • 浏览: 16044644 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论
阅读更多
在分布式企业级应用程序中,异步消息机制用于有效地协调各个部分的工作。

  J2EE为我们提供了JMS和消息驱动豆(Message-DrivenBean),用来实现应用程序各个部件之间的异步消息传递。

  一.什么是消息系统?

  通常一个消息系统允许分开的未耦合的应用程序之间可靠地异步通信。在企业应用时,需要一种异步的,非阻塞的消息传递。比如,一个客户端可能希望给一个服务器发送一个请求后,不在乎是否马上能得到回应。这样,客户端没有理由必须等待服务器处理请求。客户端应用程序在递交一个请求之后,只需确保请求到达服务器端后,就可以处理其他任务。通常,这是很高效的。消息系统提供了许多其他分布式对象计算模型没有的优点。它鼓励在消息产生者和使用者之间的"松耦合",在它们之间有很高程度的事务处理。对于使用者,它不在乎谁产生了消息,产生者是否仍在网络上以及消息是什么时候产生的。这就允许建立动态的,可靠的和灵活的系统。整个的子系统能被修改而不会影响系统的其他部分。
  另外的优点包括:系统的高度可扩展性,容易与其他系统进行集成,以及高度的可靠性。由于可靠性和可扩展性,使得它们用于解决许多商业和科学计算问题。比如,消息系统是许多应用程序的基础,这些应用程序可以是工作流,网络管理,通信服务或供应链管理程序。在JAVA技术中,处理异步消息的能力是通过JMS来实现的。JMS最初设计是为了给传统的消息对象中间件提供一个标准的JAVA接口。而这些产品是在一个企业级应用程序中必须的。现在出现了许多支持JMS的纯JAVA的产品。

  消息系统类型

  通常有两种消息类型。

  1.发布/订阅(publish/subscribe)

  发布/订阅消息系统支持一个事件驱动模型,消息产生者和使用者都参与消息的传递。产生者发布事件,而使用者订阅感兴趣的事件,并使用事件。产生者将消息和一个特定的主题(Topic)连在一起,消息系统根据使用者注册的兴趣,将消息传给使用者。

  2.点对点(Peertopeer)

  在点对点的消息系统中,消息分发给一个单独的使用者。它维持一个"进入"消息队列。消息应用程序发送消息到一个特定的队列,而客户端从一个队列中得到消息。

  二.JMS简介

  JMS的目的是提供给消息系统客户一个固定的接口,而且与底层的消息提供者无关。这样,客户端的应用程序可以在不同的机器和操作系统中移植,而且能在不同的消息系统产品之间转移。JMS客户端都是建立在JAVA技术上的,从而也能使用其他JAVAAPI,如JDBC数据库连接,使用JAVABEAN组件模型,JDNI名字服务,JTA客户端事务处理控制以及J2SE和J2EEAPI来实现企业级应用服务程序。

  1.JMS对象模型

图1显示了JMS对象,用于提供JMS客户端与JMS服务提供者相连的对象。

  ConnectionFactory是一个客户端用来创建一个Connection的管理对象。由于在Connection创建时有授权和通信建立过程,因此这个对象是比较大的。

  Destination对象将一个消息的目的和服务提供者有关的地址及配置信息包装起来。

  Session是JMS实体,用来支持事务处理和异步消息消费。JMS并不需要客户端的代码用于异步消息消费或能处理多个并发消息。通常,事务的复杂性都由一个Session来封装。

  一个Session是一个原子单位的工作,与数据库的事务一样,要实现多线程事务比较困难。Session提供了在一个线程编程模式下的并发的优点。

  MessageProducer和MessageConsumer对象由Session对象创建。用于发送和接受消息。为了确保消息的传递,JMS服务提供者处理的消息都要处于PERSISTENT模式。PERSISTENT模式使得JMS提供者出问题后,也能让消息保存下来。

  Session,MessageProducer和MessageConsumer都不支持并发,而ConnectionFactory,Destination和Connection都支持并发。

  2.JMS应用程序开发

  JMS中的消息

  在消息系统中,应用程序之间通信的关键是消息。因此使用JMS必须要先理解消息。

  在JMS中,消息由三部分组成:

  MESSAGEHEADER用于识别消息,比如用于判断一个给定的消息是否是一个"订阅者"

  PROPERITIES用于与应用程序相关的,提供者相关的和可选项的信息

  BODY是消息的内容,支持几种格式,包括TextMessage(对String一个简单的封装)和ObjectMessage(对任意对象的封装,但必须支持序列化),也支持其他格式。

  TextMessage

  一个TextMessage是一个String对象的封装。在只有文本对象传递时,是很有用的。它假设许多消息系统是建立在XML上的。从而TextMessage就可以成为包装它们的容器。

  创建一个TextMessage对象很简单,如下面的代码:

  TextMessagemessage=session.createMessage();

  message.setText("Hello,world!");

  ObjectMessage

  如名字所示,它是对一个JAVA对象的封装的消息。任何可序列化的JAVA对象都能用于ObjectMessage,如果必须将多个对象封装在一个消息里传递,可以使用Collection对象,来包括多个序列化对象。

  下面是创建一个ObjectMessage

  ObjectMessagemessage=session.createObjectMessage();

  message.setObject(myObject);

  创建一个JMS客户端程序

  一个典型的JMS客户端由下面的几个基本步骤来创建:

  创建一个到消息系统提供者的连接(Connection)

  创建一个Session,用于接收和发送消息

  创建MessageProducer和MessageConsumer来创建和接收消息

  当完成了上述步骤后,一个消息产生者客户端将创建并发布消息到一个主题,而消息使用者客户端会接收与一个主题相关的消息。

  1.创建一个Connection

  一个Connection提供客户端对底层的消息系统的访问。并实现资源的分配和管理。通过使用一个ConnectionFactory来创建一个Connection,通常用JDNI来指定:



Connectionmessage=newinitialContext();
TopicConnectionFactorytopicConnectionFactory=(TopicConnectionFactory);
topic=(Topic)jndiContext.lookup(topicName);
topicConnection=topicConnectionFactory.createTopicConnection();




2.创建一个Session

  Session是一个比较大的JMS对象,他提供了生产和消费消息的手段。用于创建消息使用者和消息产生者。

  topicSession=topicConnection.createTopicSession(false,Session.AUTO_ACKNOWLEDGE);

  两个参数用于控制事务和消息确认。

  3.定位一个Topic

  用JDNI来定位一个Topic,Topic用于识别发送或接收的消息,在发布/订阅系统中。订阅者订阅一个给定的Topic,而发布者将它发布的消息与一个Topic相连。

  下面是创建一个Topic"WeatherReport"

  TopicweatherTopic=messaging.lookup("WeatherReport");

  4.启动Connection

  在上面的初始化步骤之后,消息流是禁止的,用于防止在初始化时发生不可预料的行为。一旦初始化结束,必须让Connection启动消息系统。

  topicConnection.start();

  5.创建一个消息产生者

  在发布/订阅里,一个产生者发布消息到一个指定的Topic。下面的代码显示创建一个产生者,以及后续的建立和发布一个简单文本消息。

  TopicPublisherpublisher=session.createPublisher(weatherTopic);

  TexeMessagemessage=session.createMessage();

  message.setText("ssss");

  publisher.publish(message);

  下面是一个消息使用者的代码

topicConnection=topicConnectionFactory.createTopicConnection();
topicSession=topicConnection.createTopicSession(false,Session.AUTO_ACKNOWLEDGE);
topicSubscriber=topicSession.createSubscriber(topic);
topicListener=newMsgListener();
topicSubscriber.setMessageListener(topicListener);
topicConnection.start();
分享到:
评论

相关推荐

    J2EE的异步消息机制

    J2EE的异步消息机制J2EE的异步消息机制J2EE的异步消息机制J2EE的异步消息机制

    J2EE的异步消息机

    J2EE在分布式企业级应用程序中,异步消息机制用于有效地协调各个部分的工作。J2EE为我们提供了JMS和消息驱动豆(Message-Driven Bean),用来实现应用程序各个部件之间的异步消息传递.

    论文研究-面向WebServices的异步调用机制研究.pdf

    当前的Web 服务规范和标准并不显式地支持异步操作。在构件运行平台的设计中通过回调机制和服务异步操作机制,可支持服务异步调用和会话状态化。扩展J2EE平台以提供这样的运行环境,并在WebLogic平台上实现。

    WSAD环境下JMS异步通信全攻略

    如前所述,在JMS之前,J2EE原来是一个建立在Java RMI-IIOP通信协议基础上的同步环境,但MDB却具有接收异步消息的能力。  异步通信使得企业应用能够建立在一种全新的通信机制之上,它具有如下重要优点:  ■ ...

    java消息中间件

    管制关注于数据的发送和接收,利用高效可靠的异步消息传递机制集成分布式系统。 优点 ① 解耦 ② 异步 ③ 横向扩展 ④ 安全可靠 ⑤ 顺序保证(比如kafka) jms java消息服务(Java Message Service)即JMS,是一个...

    Mule是一个企业服务总线(ESB)消息框架

    3.支持任何传输之上的异步,同步和请求响应事件处理机制. 4.支持Axis或者Glue的Web Service. 5.灵活的部署结构[Topologies]包括Client/Server, P2P, ESB 和Enterprise Service Network. 6.与Spring 框架集成:可...

    MULE IN ACTION

    3.支持任何传输之上的异步,同步和请求响应事件处理机制. 4.支持Axis或者Glue的Web Service. 5.灵活的部署结构[Topologies]包括Client/Server, P2P, ESB 和Enterprise Service Network. 6.与Spring 框架集成:可...

    NC5.6安装指南.doc

    数据浏览的分页机制 异步查询任务机制 后台直送打印机的异步打印机制 此外 基础数据还为改进产品操作的易用和高效 支持了基本档案的参照支持了常用数据的设置并对常用数据进行缓存 再次改进了客商 存货 项目档案的...

    工作流chm手册jbpm3.1

    JBoss jBPM 有直观的流程语言来表示商业流程图的术语比如,任务,异步通讯的等待状态,定时器,自动操作等等.把这些操作绑在一起,, JBoss jBPM 就有了最强大和易扩展性的控制流机制. JBoss jBPM 只有最小的倚赖性可以...

    jBPM中文用户指南 chm格式

    JBoss jBPM 有直观的流程语言来表示商业流程图的术语比如,任务,异步通讯的等待状态,定时器,自动操作等等.把这些操作绑在一起,, JBoss jBPM 就有了最强大和易扩展性的控制流机制. JBoss jBPM 只有最小的倚赖性可以...

    JBPM3.1Help(中文)

    JBoss jBPM 有直观的流程语言来表示商业流程图的术语比如,任务,异步通讯的等待状态,定时器,自动操作等等.把这些操作绑在一起,, JBoss jBPM 就有了最强大和易扩展性的控制流机制. JBoss jBPM 只有最小的倚赖性可以...

    jBoss jBMP.chm

    JBoss jBPM 有直观的流程语言来表示商业流程图的术语比如,任务,异步通讯的等待状态,定时器,自动操作等等.把这些操作绑在一起,JBoss jBPM 就有了最强大和易扩展性的控制流机制. JBoss jBPM 只有最小的倚赖性可以...

    工作流详解

    JBoss jBPM 有直观的流程语言来表示商业流程图的术语比如,任务,异步通讯的等待状态,定时器,自动操作等等.把这些操作绑在一起,, JBoss jBPM 就有了最强大和易扩展性的控制流机制. <br>JBoss jBPM 只有最小的倚赖...

    jbpm教程

    JBoss jBPM 有直观的流程语言来表示商业流程图的术语比如,任务,异步通讯的等待状态,定时器,自动操作等等.把这些操作绑在一起,, JBoss jBPM 就有了最强大和易扩展性的控制流机制. <br>JBoss jBPM 只有最小的倚赖...

    jbpm中文用户指南

    JBoss jBPM 有直观的流程语言来表示商业流程图的术语比如,任务,异步通讯的等待状态,定时器,自动操作等等.把这些操作绑在一起,, JBoss jBPM 就有了最强大和易扩展性的控制流机制. <br>JBoss jBPM 只有最小的倚赖...

    JBPM用户手册

    JBOSS jBPM拥有直观的流程语言,用任务、异步的等待状态、定时器、自动化动作…等来表示业务流程图,把这些操作绑定在一起,JBOSS jBPM就拥有了非常强大和可扩展的控制流机制。 JBOSS jBPM只有最小的依赖,可以象...

    工作流督-办管理

    该系统采用J2EE技术开发 ,jdk1.6 数据库:mysql 开发工具myeclipse6.5 服务器:tomcat6.0 系统:vista 整和:struts+hibernate+spring+jbpm 本系统业务流程用工作流(jbpm),数据库持久化采用 hibernate,视图层采用...

    Ajax简介

    火龙果软件工程技术中心 作为J2EE开发人员,我们似乎经常关注“后端机制(backendmechanics)”。我们通常会忘记,J2EE的主要成功之处在Web应用程序方面;许多原因使得人们喜欢利用Web开发应用程序,但主要还是因为...

    JAVA上百实例源码以及开源项目

     在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被发送给消息发送者,发送一个e-mail通知给由recipient参数确定的e-...

Global site tag (gtag.js) - Google Analytics