我創建了一個連接到WebLogic隊列的同步QueueReceiver。QueueReceiver receive()沒有收到消息
doStuff() {
ctx = new InitialContext();
qconFactory = (QueueConnectionFactory) ctx.lookup(CONNECTION_FACTORY);
queue = (Queue) ctx.lookup(outputFromOrcSyncQueue);
queueConnection = qconFactory.createQueueConnection();
queueSession = queueConnection.createQueueSession(true, -1);
queueReceiver = queueSession.createReceiver(queue);
Message message = queueReceiver.receive();
...
}
在QueueSession的創作true
這是因爲連接工廠進行交易。 如果我創建了一個沒有事務的queueSession(通過放false
),結果是queueReceiver似乎忽略了使用doStuff
方法的方法(使用receive(timeout)
的相同行爲,它在等待之前不會等待)。
我還必須在我的連接工廠(WebLogic連接工廠配置中的客戶端選項卡)上啓用Prefetch Mode for Synchronous Consumer。
我的問題是接收器沒有讀取任何發送到隊列的消息。
我可以在WebLogic控制檯上看到我的消息,我甚至可以看到我的queueReceiver在隊列中偵聽,但queueReceiver似乎忽略它們。
替代方法我試過:
- 更改ACK類型的QueueSession創建(兩面,生產者和消費者)
- 提交關於生產者會議
send()
後和前close()
謝謝。
它的工作就像一個魅力!謝謝你達尼洛。 – seph