简介
全称: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(