J2EE技术规范(九)——JMS (JMS客户端)

来源:互联网 发布:关键词排名优化公司 编辑:程序博客网 时间:2024/05/21 18:38

上篇博客写了JMS的一些内容,后来觉得那篇博客的内容不够阐述JMS的内容,所以这篇博客就继续完善JMS。

在WebLogic Server 环境中配置JMS

WebLogic Server的JMS特性

  1. WebLogic Server 按照JMS 1.0.2规范实现JMS service provider(服务提供程序)
  2. WebLogic Server JMS支持:
    •  点对点和发布/订阅两种域
    • 保证消息分发
    • 事务的消息分发 
    • 可靠的订阅机制
    • 服务器端消费者会话池
    • 组播
    • 集群

JMS服务器

  1. 在WebLogic Server中,消息服务通过JMS服务器实现。
  2. JMS服务器负责解释和分发消息

配置WebLogic Server JMS

  1. 配置WebLogic JMS的过程由使用管理控制台创建,配置和指定这三个步骤组成:
    • JMS服务器
    • 队列和/或主题的目的
    • 连接工厂(可选的) 

编写简单的JMS客户

  1.  在WebLogic Server中配置JMS
  2. 编写简单的JMS客户机
    •  编写简单的JMS生产者
    • 编写简单的JMS消费者
  1. 发送消息
  2. 接受消息
  3. JMS事务

JMS体系结构:连接(Connecting)

JMS体系结构:发送消息

 

 

 

 

5个步骤:

我们继续看一下下面的3个步骤来进行连接:

步骤1——查找连接工厂(Connection Factory)

  1. 连接工厂:
    •  是存储在JNDI上面的轻量级对象
    • 用于创建到目的的新连接
    • 有两种连接类型:
      •  QueueConnectionFactory
      • TopicConnectionFactory
QueueConentionFactory qconFactory=(QueueConnectionFactory)ctx.lookup(ConnectionFactoryJNDIName);>

 步骤2——创建连接(Connection)

  1.  连接:
    • 是到JMS服务器的通信连接
    • 用于创建会话(Session)
    • 有两种类型:
      • QueueConnection
      • TopicConnection

 

QueueConnection qcon=qconFactory.createQueueConnection();

 步骤3——创建会话(session)

  1. 会话:
    • 用于创建发送者,接收者和空的消息
    • 界定事务
    • 有两种类型:
      • QueueSession
      • TopicSession
QueueSession qsession=qcon.createQueueSesion(false,Session.AUTO_ACKNOWLEDGE);//会话不使用事务

 确认模式

  1. 在非事务会话中,应用创建会话选择以下五种确认模式中的一种:
    • Session.AUTO_ACKNOWLEDGE
    • Session.CLIENT_ACKNOWLEDGE
    • Session.DUPS_OK_ACKNOWLEDGE
    • WLSession.NO.ACKNOWLEDGE
    • WLSession.MULTICAST_NO_ACKNOWLEDGE

接下来我们就一一来对这几个模式进行探讨:

确认模式(一)

  1. Session.AUTO_ACKNOWLEDGE 当消费者完成消息处理之后,通过Session发送确认接收消息
  2. Session.AUTO_ACKNOWLEDGE DGE 消息确认不得不从消费者返回
  3. Session.DUPS_OK_ACKNOWLEDGE 会话返回消费者接收的确认,万一确认消息丢失,允许复制

确认模式(二)

  1. WLSession.NO_ACKNOWLEDGE 消息被接收之后,立即从消费的目的地删除,而不用等待确认。所以一些消息可能丢失
  2. WLSeesion.MULTICAST_NO_ACKNOWLEDGE 当广播的时候。情形同上。

步骤4——目的(Destination)查找

  1. 目的:
    • 是存储在JNDI中的轻量级对象
    • 标识消息的目标
    • 有两种类型:
      • Queue
      • Topic

Queue queue=(Queue)ctx.lookup("QueueJNDIname");//JNDI名已经在第三步配置WebLogic Server时设置

步骤5——发送消息

  1. 消息产生者:
    • 可向一个目的发送任何一种类型的消息
    • 指定分发选项
    • 有两种类型:
      • QueueSender
      • TopicPublicsher

QueueSender qsender=qsession.createSender(queue);qcon.start();TextMessage msg=qsession.createTextMessage();msg.setText("Hello JMS World");Qsender.send(msg);

JMS消息

  1. 一个JMS消息是一个实现了javax.jms.Message接口的类
  2. 示例:
    • TextMessage:含有字符串
    • MapMessage:含有名/值对得列表
    • ObjectMessage:含有Java对象(必须可序列化)
    • StreamMessage:含有值得流
    • ByteMessage:含有字节数组
  3. 可以编写自己的消息类型

消息接收者

  1. 要从JMS目的中接收消息,按照前面提到的步骤1-4查找目的。
  2. 然后使用消息接收者接收消息:
  • QueueReceiver
  • TopicSubScriber

QueueReceiver qreceiver=quession.createReceiver(queue);qcon.start();TextMessage msg=(TextMessage)qreceiver.receive();System.out.println("Message is:"+msg.getText());