更新時(shí)間:2021-11-23 09:39:45 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1851次
ActiveMQ 是一個(gè) MOM,具體來說是一個(gè)實(shí)現(xiàn)了 JMS 規(guī)范的系統(tǒng)間遠(yuǎn)程通信的消息代理。MOM 就是面向消息中間件(Message-oriented middleware),是用于以分布式應(yīng)用或系統(tǒng)中的異步、松耦合、可靠、可擴(kuò)展和安全通信的一類軟件。MOM 的總體思想是它作為消息發(fā)送器和消息接收器之間的消息中介,這種中介提供了一個(gè)全新水平的松耦合。JMS 叫做 Java 消息服務(wù)(Java Message Service),是 Java 平臺上有關(guān)面向 MOM 的技術(shù)規(guī)范,旨在通過提供標(biāo)準(zhǔn)的產(chǎn)生、發(fā)送、接收和處理消息的 API 簡化企業(yè)應(yīng)用的開發(fā),類似于 JDBC 和關(guān)系型數(shù)據(jù)庫通信方式的抽象。

Provider:純 Java 語言編寫的 JMS 接口實(shí)現(xiàn)(比如 ActiveMQ 就是)
Domains:消息傳遞方式,包括點(diǎn)對點(diǎn)(P2P)、發(fā)布/訂閱(Pub/Sub)兩種
Connection factory:客戶端使用連接工廠來創(chuàng)建與 JMS provider 的連接
Destination:消息被尋址、發(fā)送以及接收的對象
其中:
P2P (點(diǎn)對點(diǎn))消息域使用 queue 作為 Destination,消息可以被同步或異步的發(fā)送和接收,每個(gè)消息只會給一個(gè) Consumer 傳送一次。
Consumer 可以使用 MessageConsumer.receive() 同步地接收消息,也可以通過使用MessageConsumer.setMessageListener() 注冊一個(gè) MessageListener 實(shí)現(xiàn)異步接收。
多個(gè) Consumer 可以注冊到同一個(gè) queue 上,但一個(gè)消息只能被一個(gè) Consumer 所接收,然后由該 Consumer 來確認(rèn)消息。并且在這種情況下,Provider 對所有注冊的 Consumer 以輪詢的方式發(fā)送消息。

Pub/Sub(發(fā)布/訂閱,Publish/Subscribe)消息域使用 topic 作為 Destination,發(fā)布者向 topic 發(fā)送消息,訂閱者注冊接收來自 topic 的消息。發(fā)送到 topic 的任何消息都將自動(dòng)傳遞給所有訂閱者。接收方式(同步和異步)與 P2P 域相同。
除非顯式指定,否則 topic 不會為訂閱者保留消息。當(dāng)然,這可以通過持久化(Durable)訂閱來實(shí)現(xiàn)消息的保存。這種情況下,當(dāng)訂閱者與 Provider 斷開時(shí),Provider 會為它存儲消息。當(dāng)持久化訂閱者重新連接時(shí),將會受到所有的斷連期間未消費(fèi)的消息。

以上為理論基礎(chǔ),如果大家想了解更多相關(guān)知識,可以關(guān)注一下動(dòng)力節(jié)點(diǎn)的ActiveMQ教程,里面的內(nèi)容豐富,適合沒有基礎(chǔ)的小白學(xué)習(xí),希望對大家能夠有所幫助。

初級 202925

初級 203221

初級 202629

初級 203743