在Ubuntu上管理WebLogic的JMS队列前,需完成以下基础准备:
./startWebLogic.sh
脚本启动Domain的AdminServer,确保服务正常运行(可通过http://<Ubuntu_IP>:7001/console
访问管理控制台)。JAVA_HOME
环境变量(如export JAVA_HOME=/usr/lib/jvm/java-8-oracle
)。持久化存储是JMS队列消息落地的关键,Ubuntu环境下推荐File Store(单节点)或JDBC Store(集群):
MyFileStore
)。/u01/weblogic/jms_store
,需提前创建目录并赋予WebLogic用户读写权限:chown -R weblogic:weblogic /u01/weblogic/jms_store
)。jdbc/JmsDataSource
),指向Ubuntu上的数据库(如MySQL、Oracle)。WLS_JMS_STORE
)。JMS服务器是管理队列、主题的容器:
MyJMSServer
),选择上一步创建的Persistent Store(如MyFileStore
)。AdminServer
,集群选对应的Managed Server)。JMS模块是队列、连接工厂等资源的逻辑容器,子部署用于将资源关联到具体服务器:
MyJMSModule
),选择目标JMS服务器(如MyJMSServer
)。MySubdeployment
)。AdminServer
或集群中的Managed Server),切勿选择AdminServer作为子部署目标(避免单点故障)。队列用于**点对点(PTP)**消息模型,以下是详细步骤:
MyJMSModule
),点击“New → Queue”。MyQueue
),JNDI Name(如jms/MyQueue
,需全局唯一,应用程序通过此名称查找队列)。MySubdeployment
)。连接工厂用于客户端获取JMS连接,需与队列关联:
MyJMSModule
),点击“New → Connection Factory”。MyConnectionFactory
),JNDI Name(如jms/MyConnectionFactory
,需唯一)。AdminServer
或集群)。通过控制台的“Monitoring”标签,可实时查看队列的关键指标:
在Ubuntu上编写Java客户端代码,通过JNDI查找队列并发送/接收消息:
import javax.jms.*;
import javax.naming.*;
import java.util.Hashtable;
public class JMSQueueTest {
public static void main(String[] args) throws Exception {
// 1. 配置JNDI环境
Hashtable<String, String> env = new Hashtable<>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
env.put(Context.PROVIDER_URL, "t3://<Ubuntu_IP>:7001"); // 替换为Ubuntu服务器IP
env.put(Context.SECURITY_PRINCIPAL, "weblogic"); // WebLogic管理员用户名
env.put(Context.SECURITY_CREDENTIALS, "welcome1"); // WebLogic管理员密码
// 2. 获取初始上下文
Context ctx = new InitialContext(env);
// 3. 查找连接工厂和队列
ConnectionFactory cf = (ConnectionFactory) ctx.lookup("jms/MyConnectionFactory");
Queue queue = (Queue) ctx.lookup("jms/MyQueue");
// 4. 创建连接与会话
Connection conn = cf.createConnection();
Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 5. 创建生产者并发送消息
MessageProducer producer = session.createProducer(queue);
TextMessage message = session.createTextMessage("Hello, WebLogic JMS on Ubuntu!");
producer.send(message);
System.out.println("Message sent: " + message.getText());
// 6. 创建消费者并接收消息
MessageConsumer consumer = session.createConsumer(queue);
conn.start();
TextMessage receivedMsg = (TextMessage) consumer.receive(5000); // 等待5秒
if (receivedMsg != null) {
System.out.println("Message received: " + receivedMsg.getText());
} else {
System.out.println("No message received.");
}
// 7. 关闭资源
consumer.close();
producer.close();
session.close();
conn.close();
}
}
注意事项:
<Ubuntu_IP>
为实际服务器IP。sudo ufw allow 7001/tcp
)。wlthint3client.jar
)到classpath(路径通常为<WebLogic_Home>/wlserver/server/lib
)。ps -ef | grep weblogic
),PROVIDER_URL
是否正确,防火墙是否放行端口。weblogic
)具有JMS资源的访问权限(控制台→Security Realms→myrealm→Roles and Policies)。通过以上步骤,可在Ubuntu上完成WebLogic JMS队列的全生命周期管理,满足企业级异步消息需求。