在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是否正確,防火墻是否放行端口。通過以上步驟,可在Ubuntu上完成WebLogic JMS隊列的全生命周期管理,滿足企業級異步消息需求。