简介
全称:WebLogic Server的Java Messaging Service(JMS)
WebLogic JMS 是与 WebLogic Server 平台紧密集成的企业级消息传递系统。
Java Message Service (JMS) API 是一种消息传递标准,允许基于 Java Platform Enterprise Edition (Java EE) 的应用程序组件创建、发送、接收和读取消息。它实现了松散耦合、可靠和异步的分布式通信。
JMS 的具体功能包括
- 可在共享消息系统的 Java 应用程序之间交换消息
- 用于创建、发送和接收消息的标准接口便于应用程序开发
JMS 支持两种消息传递模式:点对点 (PTP) 和发布/订阅。
WebLogic JMS 服务器架构的关键组件包括
- 可托管一组预定义模块及其相关持久存储(位于 WebLogic Server 实例中)的 JMS 服务器。
- 配置资源(查询、主题、连接工厂等),包括根据 http://xmlns.oracle.com/weblogic/weblogic-jms/1.4/weblogic-jms.xsd架构XML文档定义的JMS模块。
- 客户端 JMS 应用程序。 向目的地生成消息或从目的地消费消息。
- Java 命名和目录接口 (JNDI),提供资源查找功能。 JNDI 名称用于 JMS 资源(如连接工厂和目的地)的配置。
这些资源的运行时实现使用特定名称绑定到 JNDI。 - WebLogic 持久存储(文件存储或支持 JDBC 的数据库)用于存储持久消息数据。
后文介绍如何配置JMS以及使用对应API实现送收信息。
创建持久存储
WebLogic Console ->Services->Persistent Stores,中新建FileStore
创建JMS server
webLogic Console->Servcies->Messaging->JMS Servers新建JMS Server
配置消息通信JNDI
Servcies->Messaging->JMS Modules中新建JMS 模块
配置文件具体保存位置参考如下
进入新追加的JMS模块,在Subdeployments 中新建Subdeployment
进入新追加的jms_test_module2的Configuration中,新建资源。
资源类型选择连接工厂
继续新建资源,这次选择队列
继续新建资源,这次选择Topic
送收信代码实装
队列送信
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Hashtable;import javax.jms.*;
import javax.naming.*;public class QueueMsgSender {private final static String JNDI_FACTORY = "weblogic.jndi.WLInitialContextFactory";private final static String PROVIDER_URL = "t3://192.168.56.106:7001";private final static String JMS_FACTORY = "jms/jms_test_connection_factory1";private final static String JNDI_QUEQUE = "jms/jms_test_queue";private QueueConnectionFactory connectionFactory;private QueueConnection queueCon;private QueueSession qSession;private Queue queue;private QueueSender sender;private ObjectMessage objectMessage;public void init(Context ctx, String queueName)throws NamingException, JMSException {connectionFactory = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY);queueCon = connectionFactory.createQueueConnection();//false: 将会话标记为非事务性的.非事务性的会话会立即发送消息。//Session.AUTO_ACKNOWLEDGE: 表示当客户端成功的从receive方法返回后,或者是在消息监听器成功返回后,会话会自动确认消息的接收qSession = queueCon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);//通过JNDI查找送信目标队列queue = (Queue)ctx.lookup(queueName);//使用会话和目标(队列)创建消息生产者(队列发送者)的引用sender = qSession.createSender(queue);//开始连接queueCon.start();}public void sendMsg(String msg) throws JMSException {User user = new User();user.setName(msg);user.setAge(18);objectMessage = qSession.createObjectMessage();objectMessage.setObject(user);sender.send(objectMessage);}public void readAndSend() throws IOException, JMSException {BufferedReader msgStream = new BufferedReader(new InputStreamReader(System.in));boolean quitNow = false;do {System.out.print("Enter message (\"quit\" to quit): \n");String line = msgStream.readLine();if (line != null && line.trim(