WildFly(原JBoss AS,V8+更名)整合HornetQ作為消息子系統。HornetQ完全支援JMS 1.1,並定義自有Core Client API極致性能與靈活性。

Core Client API參考:官方文檔
完全對齊JMS兩大模型:

配置於standalone/domain profile中:
<connectors>
<netty-connector name="netty" socket-binding="messaging" />
<netty-connector name="netty-throughput" socket-binding="messaging-throughput">
<param key="batch-delay" value="50" />
</netty-connector>
<servlet-connector name="servlet" socket-binding="http" host="default-host" />
<in-vm-connector name="in-vm" server-id="0" />
</connectors>
<acceptors>
<netty-acceptor name="netty" socket-binding="messaging" />
<netty-acceptor name="netty-throughput" socket-binding="messaging-throughput">
<param key="batch-delay" value="50" />
<param key="direct-deliver" value="false" />
</netty-acceptor>
<in-vm-acceptor name="in-vm" server-id="0" />
</acceptors>
成對定義:Invm Acceptor對應Invm Connector,Netty同理。
預設持久化至文件(Persistent Journal),兩種文件操作:
預設使用AIO,無AIO環境自動降級NIO。

支援三種部署模式:
注意:模式2/3僅支援AIO。模式1做HA需配置消息復制(主從同步日誌)。
作者觀點:持久化方式單一(無資料庫選項),但NFS/GFS共享避免復制性能損耗。極高負載場景建議引入Infinispan緩存集群做消息共享增強HA。
集群環境主從節點狀態對等,主失效從即時接管。模式2/3共享存儲天然一致;模式1需復制。

注意:從節點啟動時同步現有數據,同步完成前無容錯能力。
兩類故障場景導致重複發送:
發送端無法區分,統一重發。訂單系統若無去重將導致重複下單。
HornetQ去重原理:
Duplicate ID Cache
作者觀點:極端情況(緩存崩潰)仍可能重複。實際業務(訂單/積分/支付/物流)一般不考慮極端場景,淘寶Notify/MetaQ同策略。建議分布式緩存(Terracotta BigMemory、Oracle Coherence)統一管理Duplicate ID,節點崩潰亦不重複消費。
電商場景:訂購iPad→加入佇列→取消訂購→加入佇列。若消費順序顛倒,取消失效。

JMS 2.0僅規範「單生產者、單佇列、單消費者」順序一致,分布式環境無強制要求。IBM MQ消息分組、WebLogic Unit-of-Order、HornetQMessage Grouping均提供解決方案。
同業務類型消息分組,確保同組消息由同一消費者順序消費(即使集群環境)。

前提條件:
參考資源:WildFly評估之消息子系統