我遇到了有關JMS的問題。問題是,我有一個應用程序,它試圖通過JMS發送消息,但是在JMS服務器重新啓動後,它會在服務器關閉時引發異常。它不重新連接。在運行期間JMS服務器重新啓動後發送JMS消息
沒有重新啓動JMS服務器就完全正常,我使用的是weblogic 10.x.
這是關於JMS配置的問題嗎?
謝謝
我遇到了有關JMS的問題。問題是,我有一個應用程序,它試圖通過JMS發送消息,但是在JMS服務器重新啓動後,它會在服務器關閉時引發異常。它不重新連接。在運行期間JMS服務器重新啓動後發送JMS消息
沒有重新啓動JMS服務器就完全正常,我使用的是weblogic 10.x.
這是關於JMS配置的問題嗎?
謝謝
你可以發佈你的代碼如何發送消息嗎?
如果您嘗試在JMS服務器關閉時發送消息,您可能會遇到異常,必須處理該消息。當您下次嘗試發送消息時,當JMS服務器重新啓動並運行時,您可能會從連接工廠創建新的連接。重新連接將happend然後:
// Let's say, you inject CF and Dest.
@Resource(lookup = "jms/ConnectionFactory")
private static ConnectionFactory cf;
@Resource(lookup = "jms/MyQueue")
private static Destination dest;
public void sendMessage(){ // called every time you need to send a message.
try{
Connection con = cf.createConnection(); // will reconnect, otherwise pooled.
Session sess = con.createSession(false,Session.AUTO_ACKNOWLEDGE);
MessageProducer prod = sess.createProducer(dest);
Message msg = sess.createTextMessage("Hello, World");
prod.send(msg);
sess.close();
con.close();
}catch(Exception e){
// handle errors
}
}
然而,也有一些內置的故障切換/中的Weblogic JMS重新連接功能,看看這個頁面:
Oracle code listing and documentation about reconnecting JMS producers
我有4個jms服務器,我的應用程序將它們用作循環發送。而在另一臺機器中,還有另外4臺。所以如果我的機器出現故障,它會切換另一個機器在失敗的情況下,它將嘗試所有8個jms服務器發送消息。但事情是,例如,我正在關閉我的第一臺機器,然後打開第二臺機器,然後打開我的第一臺機器並關閉第二臺機器,但即使它打開,它也會發出異常。那麼有沒有辦法知道,在發送之前,我的服務器可以嗎? – Neron 2012-07-09 08:46:21
每次您需要發送消息時創建一個新連接是個不好的做法。 – 2014-12-30 20:38:49
呃..不是真的。關閉連接並在需要發送另一條消息時再次打開它們是解決此處所述問題的唯一方法:在服務器重新啓動時重新連接。那就是 - 除非你在catch語句中有重新連接登錄,但是這很麻煩。我們的想法是將「重用」部分委派給JEE應用服務器或池/緩存連接工廠。還有一些像Spring CachingConnectionFactory一樣。即使是彈簧JmsTemplate也會爲每條消息創建一個新的連接+會話來應對重新連接。 – 2014-12-31 00:26:31
Neron,嘗試此解決方案:HTTP: //stackoverflow.com/questions/47683/reconnecting-jms-listener-to-jbossmq – dbf 2012-07-09 07:33:10