0
我需要從Q中消耗,並在每條消息上標記序列鍵以指示排序。即消費需要連續。從性能/吞吐量的角度來看,使用阻塞receive()方法還是onMessage()方法使用單線程配置的異步監聽器會更好?JMS隊列消費者:同步接收()或單線程onMessage()
謝謝。
我需要從Q中消耗,並在每條消息上標記序列鍵以指示排序。即消費需要連續。從性能/吞吐量的角度來看,使用阻塞receive()方法還是onMessage()方法使用單線程配置的異步監聽器會更好?JMS隊列消費者:同步接收()或單線程onMessage()
謝謝。
有很多方面會影響性能和吞吐量;在純粹的JMS術語中,說明獲取消息的同步或異步模型的效率會更低或更低,這是不太可能的。它將取決於應用程序編寫方式,使用的其他資源,實現所選消息傳遞提供程序以及其他因素(如客戶機和服務器機器的機器性能和配置)等諸多因素。
這個討論, Single vs Multi-threaded JMS Producer,涵蓋了一些這些主題。
對於序列,如果您是單線程的,只有一個會話,JMS規範就消息排序給出了一些保證;最好查看規範,看它是否符合您的總體要求。
通常人們會在消息製作時插入應用程序序列號;消費者因此可以檢查他們是否依次得到正確的消息。在消費時間添加序列號並不會特別有助於該消費者。
請記住,對消息傳遞的要求越嚴格,對整體架構的限制越嚴格,實現橫向可伸縮性越困難。
感謝您的回覆。我也懷疑「很難說」是答案。 至於消息排序,如果Q生產者放入序列鍵 - 我不會在消費者端做任何順序 - 但它們不會。 我會進一步說它是消息和排序之間的阻抗不匹配,就像OR映射的阻抗不匹配。 – wqt 2014-10-09 16:30:25
On選項可能會讓消費者查看消息的時間戳;這可以被禁用,但這取決於您相信時間的準確性。但它可能會給消費者和某種不合時宜的跡象。 – Calanais 2014-10-10 08:19:07