更新時間:2021-11-23 09:39:45 來源:動力節(jié)點(diǎn) 瀏覽1542次
ActiveMQ 是一個 MOM,具體來說是一個實(shí)現(xiàn)了 JMS 規(guī)范的系統(tǒng)間遠(yuǎn)程通信的消息代理。MOM 就是面向消息中間件(Message-oriented middleware),是用于以分布式應(yīng)用或系統(tǒng)中的異步、松耦合、可靠、可擴(kuò)展和安全通信的一類軟件。MOM 的總體思想是它作為消息發(fā)送器和消息接收器之間的消息中介,這種中介提供了一個全新水平的松耦合。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ā)送和接收,每個消息只會給一個 Consumer 傳送一次。
Consumer 可以使用 MessageConsumer.receive() 同步地接收消息,也可以通過使用MessageConsumer.setMessageListener() 注冊一個 MessageListener 實(shí)現(xiàn)異步接收。
多個 Consumer 可以注冊到同一個 queue 上,但一個消息只能被一個 Consumer 所接收,然后由該 Consumer 來確認(rèn)消息。并且在這種情況下,Provider 對所有注冊的 Consumer 以輪詢的方式發(fā)送消息。
Pub/Sub(發(fā)布/訂閱,Publish/Subscribe)消息域使用 topic 作為 Destination,發(fā)布者向 topic 發(fā)送消息,訂閱者注冊接收來自 topic 的消息。發(fā)送到 topic 的任何消息都將自動傳遞給所有訂閱者。接收方式(同步和異步)與 P2P 域相同。
除非顯式指定,否則 topic 不會為訂閱者保留消息。當(dāng)然,這可以通過持久化(Durable)訂閱來實(shí)現(xiàn)消息的保存。這種情況下,當(dāng)訂閱者與 Provider 斷開時,Provider 會為它存儲消息。當(dāng)持久化訂閱者重新連接時,將會受到所有的斷連期間未消費(fèi)的消息。
以上為理論基礎(chǔ),如果大家想了解更多相關(guān)知識,可以關(guān)注一下動力節(jié)點(diǎn)的ActiveMQ教程,里面的內(nèi)容豐富,適合沒有基礎(chǔ)的小白學(xué)習(xí),希望對大家能夠有所幫助。
初級 202925
初級 203221
初級 202629
初級 203743