上篇博客写了JMS的一些内容,后来觉得那篇博客的内容不够阐述JMS的内容,所以这篇博客就继续完善JMS。
在WebLogic Server 环境中配置JMS
WebLogic Server的JMS特性
-
WebLogic Server 按照JMS 1.0.2规范实现JMS service provider(服务提供程序)
-
WebLogic Server JMS支持:
-
点对点和发布/订阅两种域
-
保证消息分发
-
事务的消息分发
-
可靠的订阅机制
-
服务器端消费者会话池
-
组播
-
集群
-
JMS服务器
-
在WebLogic Server中,消息服务通过JMS服务器实现。
-
JMS服务器负责解释和分发消息
配置WebLogic Server JMS
-
配置WebLogic JMS的过程由使用管理控制台创建,配置和指定这三个步骤组成:
-
JMS服务器
-
队列和/或主题的目的
-
连接工厂(可选的)
-
编写简单的JMS客户
-
在WebLogic Server中配置JMS
-
编写简单的JMS客户机
-
编写简单的JMS生产者
-
编写简单的JMS消费者
-
-
发送消息
-
接受消息
-
JMS事务
JMS体系结构:连接(Connecting)
JMS体系结构:发送消息
5个步骤:
我们继续看一下下面的3个步骤来进行连接:
步骤1——查找连接工厂(Connection Factory)
-
连接工厂:
-
是存储在JNDI上面的轻量级对象
-
用于创建到目的的新连接
-
有两种连接类型:
-
QueueConnectionFactory
-
TopicConnectionFactory
-
-
QueueConentionFactory qconFactory=(QueueConnectionFactory)ctx.lookup(ConnectionFactoryJNDIName);>
步骤2——创建连接(Connection)
- 连接:
- 是到JMS服务器的通信连接
- 用于创建会话(Session)
- 有两种类型:
- QueueConnection
- TopicConnection
QueueConnection qcon=qconFactory.createQueueConnection();
步骤3——创建会话(session)
- 会话:
- 用于创建发送者,接收者和空的消息
- 界定事务
- 有两种类型:
- QueueSession
- TopicSession
QueueSession qsession=qcon.createQueueSesion(false,Session.AUTO_ACKNOWLEDGE);//会话不使用事务
确认模式
- 在非事务会话中,应用创建会话选择以下五种确认模式中的一种:
- Session.AUTO_ACKNOWLEDGE
- Session.CLIENT_ACKNOWLEDGE
- Session.DUPS_OK_ACKNOWLEDGE
- WLSession.NO.ACKNOWLEDGE
- WLSession.MULTICAST_NO_ACKNOWLEDGE
接下来我们就一一来对这几个模式进行探讨:
确认模式(一)
- Session.AUTO_ACKNOWLEDGE 当消费者完成消息处理之后,通过Session发送确认接收消息
- Session.AUTO_ACKNOWLEDGE DGE 消息确认不得不从消费者返回
- Session.DUPS_OK_ACKNOWLEDGE 会话返回消费者接收的确认,万一确认消息丢失,允许复制
确认模式(二)
- WLSession.NO_ACKNOWLEDGE 消息被接收之后,立即从消费的目的地删除,而不用等待确认。所以一些消息可能丢失
- WLSeesion.MULTICAST_NO_ACKNOWLEDGE 当广播的时候。情形同上。
步骤4——目的(Destination)查找
- 目的:
- 是存储在JNDI中的轻量级对象
- 标识消息的目标
- 有两种类型:
- Queue
- Topic
Queue queue=(Queue)ctx.lookup("QueueJNDIname");//JNDI名已经在第三步配置WebLogic Server时设置
步骤5——发送消息
- 消息产生者:
- 可向一个目的发送任何一种类型的消息
- 指定分发选项
- 有两种类型:
- QueueSender
- TopicPublicsher
- QueueSender
- 可向一个目的发送任何一种类型的消息
QueueSender qsender=qsession.createSender(queue);
qcon.start();
TextMessage msg=qsession.createTextMessage();
msg.setText("Hello JMS World");
Qsender.send(msg);
JMS消息
- 一个JMS消息是一个实现了javax.jms.Message接口的类
- 示例:
- TextMessage:含有字符串
- MapMessage:含有名/值对得列表
- ObjectMessage:含有Java对象(必须可序列化)
- StreamMessage:含有值得流
- ByteMessage:含有字节数组
- 可以编写自己的消息类型
消息接收者
- 要从JMS目的中接收消息,按照前面提到的步骤1-4查找目的。
- 然后使用消息接收者接收消息:
- QueueReceiver
- TopicSubScriber
QueueReceiver qreceiver=quession.createReceiver(queue);
qcon.start();
TextMessage msg=(TextMessage)qreceiver.receive();
System.out.println("Message is:"+msg.getText());