我一直在評估ActiveMQ作爲候選消息代理。我編寫了一些測試代碼來嘗試瞭解ActiveMQ的性能限制。這是分佈式機制的現實期望嗎?
我可以通過像這樣迅速地發送消息儘可能產生代理的故障狀態:
try {
while(true) {
byte[] payload = new byte[(int) (Math.random() * 16384)];
BytesMessage message = session.createBytesMessage();
message.writeBytes(payload);
producer.send(message);
} catch (JMSException ex) { ... }
我很驚訝的是,線
producer.send(message);
塊時代理進入故障州。我希望能拋出一些例外,所以有跡象表明經紀人失敗了。
我意識到我的測試代碼是垃圾郵件的經紀人,我希望經紀人失敗。然而,我寧願代理人「大聲」失敗,而不是簡單地阻止。
這是不切實際的期望嗎?
更新:
烏里的回答引用在3月提出的ActiveMQ的錯誤報告。錯誤描述包括一個聽起來像我所尋找的提案:「如果對傳輸的請求有一個超時(這是爲了捕捉失敗的場景,所以不會有合理的事情發生),事情會發生錯誤比建立等待線程。「
但是,在8個月後,該bug目前還沒有分配到一票。所以我猜這個問題仍然存在,ActiveMQ應該(將?)實現這個問題嗎?
克里斯,感謝您的答覆。它看起來像我可以提高內存,但阻止是不可避免的:http://activemq.apache.org/my-producer-blocks.html – 2008-12-05 15:34:42