最近通过网上查询各中资料,简单学习了下JMS。对于原理,现在处于学习阶段,未完全融会贯通,本期先只提供简单实例源码和weblogic部署方法。希望能通过简单实例来完成JMS学习的入门。
环境:eclipse + weblogic 816
简介:部署发送端和接收端两个服务应用,发送端部署web应用并搭建JMS环境,JMS的相关jndi信息与代码中的一致。接收端应用,通过监听来自动接收发送端的消息。
注意:接收端服务必须在发送端服务启动之后才能正常使用。如果发送端重启了,服务端也必须重启。
一、JMS发送端
1、发送端应用工程搭建
(1)、发送端class编写:QueueSend类(主要参考网上相关源码)
package inspur.tax.wlkp.jms;
import java.util.Hashtable;
import javax.jms.JMSException;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
/**
* 一种典型的 JMS 程序需要经过下列步骤才能开始消息产生和使用:
· 通过 JNDI 查找 ConnectionFactory。
· 通过 JNDI 查找一个或多个 Destination。
· 用 ConnectionFactory 创建一个 Connection。
· 用 Connection 创建一个或多个 Session。
· 用 Session 和 Destination 创建所需的 MessageProducer 和 MessageConsumer。
· 启动 Connection。
*/
public class QueueSend {
/**
* 定义JNDI上下文构造器
*/
public final static String JNDI_FACTORY = "weblogic.jndi.WLInitialContextFactory";
/**
* 服务URL(weblogic部署的地址)
*/
public final static String PROVIDER_URL = "t3://127.0.0.1:20001";
/**
* 定义JMS上下文构造器(weblogic中部署时录入)
*/
public final static String JMS_FACTORY = "HanJMSFactory";
/**
* 定义消息列队(weblogic中部署时录入)
*/
public final static String QUEUE = "HanJMSQueue";
//声明队列连接构造器
private QueueConnectionFactory qconFactory;
//声明队列连接
private QueueConnection qcon;
// 声明队列会话
private QueueSession qsession;
// 声明队列发送
private QueueSender qsender;
//声明队列
private Queue queue;
//声明发送对象
/**
JMS 为不同类型的内容提供了它们各自的消息类型,但是所有消息都派生自 Message 接口
* StreamMessage:包含 Java 基本数值流,用标准流操作来顺序的填充和读取。
* MapMessage:包含一组名/值对;名称为 string 类型,而值为 Java 的基本类型。
* TextMessage:包含一个 String。
* ObjectMessage:包含一个 Serializable Java 对象;能使用 JDK 的集合类。
* BytesMessage:包含未解释字节流: 编码主体以匹配现存的消息格式。
* XMLMessage: 包含XML内容。扩展TextMessage,XMLMessage 类型的使用,使得消息过滤非常便利。
*/
private TextMessage msg;//本事例使用TextMessage
/**
* JMS消息的产生和使用
* @param mes 消息内容
*/
public void sendJmsQueue(String mes) throws Exception
{
InitialContext ic = getInitialContext();
QueueSend qs = new QueueSend();
qs.init(ic);
qs.send(mes);
qs.close();
}
/**
* 1、
* 通过 JNDI 查找 ConnectionFactory。
* 通过 JNDI 查找一个或多个 Destination。
*/
private InitialContext getInitialContext() throws NamingException {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
env.put(Context.PROVIDER_URL, PROVIDER_URL );
return new InitialContext(env);
}
/**
* 2、
* 用 ConnectionFactory 创建一个 Connection。
* 用 Connection 创建一个或多个 Session。
*· 用 Session 和 Destination 创建所需的 MessageProducer 和 MessageConsumer。
*· 启动 Connection。
*/
public void init(Context ctx) throws NamingException,JMSExcept