回憶錄之 消息中間件ActiveMQ

 

當系統業務量不是太大(未到百萬千萬過億時),使用消息中間件ActiveMQ也可以,就簡要記錄下以前某治安監控系統用的ActiveMQ(可能當時版本有點老)。

 

1.  什麼是中間件

在介紹ActiveMQ之前,簡介介紹下什麼是中間件。

中間件是介於操作系統和在其上運行的應用程序之間的軟件。中間件實質上充當隱藏轉換層,實現了分佈式應用程序的通信和數據管理。它有時被稱爲管道,因爲它將兩個應用程序連接在一起,使數據和數據庫可在“管道”間輕鬆傳遞。 通過中間件,用戶可執行很多請求,例如在 Web 瀏覽器上提交表單,或者允許 Web 服務器基於用戶的配置文件返回動態網頁。

常見的中間件示例包括數據庫中間件、應用程序服務器中間件、面向消息的中間件、Web 中間件和事務處理監視器。每個程序通常都會提供消息傳遞服務,讓不同的應用程序可使用簡單對象訪問協議 (SOAP)、Web 服務、表述性狀態轉移 (REST) 和 JavaScript 對象表示法 (JSON) 等消息傳遞框架進行通信。雖然所有中間件都執行通信功能,但公司選用的類型將取決於要使用的服務以及需要傳達的信息類型。這可包括安全身份認證、事務管理、消息隊列、應用程序服務器、Web 服務器和目錄。中間件還可用於實時發生的操作的分佈式處理,而不是來回發送數據。

2.  常用中間件分類

2.1  數據庫中間件

MyCat、ShardingSphere

2.2  緩存中間件

Redis、Memcached

2.3  消息隊列中間件

消息隊列中間件(簡稱消息中間件)是指利用高效可靠的消息傳遞機制進行與平臺無關的數據交流,並基於數據通信來進行分佈式系統的集成。通過提供消息傳遞和消息排隊模型,它可以在分佈式環境下提供應用解耦、彈性伸縮、冗餘存儲、流量削峯、異步通信、數據同步等等功能,其作爲分佈式系統架構中的一個重要組件,有着舉足輕重的地位。

目前開源的消息中間件可謂是琳琅滿目,能讓大家耳熟能詳的就有很多,比如 ActiveMQ(本文要說的)、RabbitMQ、Kafka、RocketMQ、ZeroMQ。

ActiveMQ 是 Apache 出品的、採用 Java 語言編寫的完全基於 JMS1.1 規範的面向消息的中間件,爲應用程序提供高效的、可擴展的、穩定的和安全的企業級消息通信。

RabbitMQ 是採用 Erlang 語言實現的 AMQP 協議的消息中間件,最初起源於金融系統,用於在分佈式系統中存儲轉發消息。RabbitMQ 發展到今天,被越來越多的人認可,這和它在可靠性、可用性、擴展性、功能豐富等方面的卓越表現是分不開的。

Kafka 起初是由 LinkedIn 公司採用 Scala 語言開發的一個分佈式、多分區、多副本且基於 zookeeper 協調的分佈式消息系統,現已捐獻給 Apache 基金會。它是一種高吞吐量的分佈式發佈訂閱消息系統,以可水平擴展和高吞吐率而被廣泛使用。目前越來越多的開源分佈式處理系統如 Cloudera、Apache Storm、Spark、Flink 等都支持與 Kafka 集成。

RocketMQ 是阿里開源的消息中間件,目前已經捐獻個 Apache 基金會,它是由 Java 語言開發的,具備高吞吐量、高可用性、適合大規模分佈式系統應用等特點,經歷過雙 11 的洗禮,實力不容小覷。

ZeroMQ 號稱史上最快的消息隊列,基於 C 語言開發。ZeroMQ 是一個消息處理隊列庫,可在多線程、多內核和主機之間彈性伸縮,雖然大多數時候我們習慣將其歸入消息隊列家族之中,但是其和前面的幾款有着本質的區別,ZeroMQ 本身就不是一個消息隊列服務器,更像是一組底層網絡通訊庫,對原有的 Socket API 上加上一層封裝而已。

2.4 應用服務器中間件

tomcat、jboss、weblogic

2.5  web中間件

apache、nginx

2.6  事務中間件

Seata 

 

暫且舉這麼多,沒有流行下來的就不管了!!!

3.  消息中間件ActiveMQ

3.1  背景介紹

3.1.1 java消息服務:

不同系統之間的信息交換,是我們開發中比較常見的場景,比如系統A要把數據發送給系統B,這個問題我們應該如何去處理? 1999年,原來的SUN公司領銜提出了一種面向消息的中間件服務--JMS規範(標準);常用的幾種信息交互技術(httpClient、hessian、dubbo、jms、webservice 五種).

3.1.2JMS概述:

JMS即Java消息服務(Java Message Service的簡稱),是Java EE 的標準/規範之一。這種規範(標準)指出:消息的發送應該是異步的、非阻塞的。也就是說消息的發送者發送完消息後就直接返回了,不需要等待接收者返回後才能返回,發送者和接收者可以說是互不影響。所以這種規範(標準)能夠減輕或消除系統瓶頸,實現系統之間去除耦合,提高系統的整體可伸縮性和靈活性。JMS只是Java EE中定義的一組標準API,它自身並不是一個消息服務系統,它是消息傳送服務的一個抽象,也就是說它定義了消息傳送的接口而並沒有具體實現。

3.1.3 ActiveMQ概述:

我們知道JMS只是消息服務的一組規範和接口,並沒有具體的實現,而ActiveMQ就是JMS規範的具體實現;它是Apache下的一個項目,採用Java語言開發;是一款非常流行的開源消息服務器.

3.1.4 ActiveMQ與JMS關係:

我們知道,JMS只是定義了一組有關消息傳送的規範和標準,並沒有真正實現,也就說JMS只是定義了一組接口而已;就像JDBC抽象了關係數據庫訪問、JPA抽象了對象與關係數據庫映射、JNDI抽象了命名目錄服務訪問一樣,JMS具體的實現由不同的消息中間件廠商提供,比如Apache ActiveMQ就是JMS規範的具體實現,Apache ActiveMQ纔是一個消息服務系統,而JMS不是。

3.2  ActiveMQ的使用

3.2.1  安裝ActiveMq

前提已安裝好jdk1.8https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html(自行百度),然後去官方http://archive.apache.org/dist/activemq/http://activemq.apache.org/components/classic/download/下載activemq安裝包,選擇穩定版本

也可以通過命令行下載:

wget http://archive.apache.org/dist/activemq/5.15.9/apache-activemq-5.15.9-bin.tar.gz

然後解壓縮

tar zxf apache-activemq-5.15.9-bin.tar.gz 
cd apache-activemq-5.15.9

 創建服務用戶:

useradd activemq
chown -R activemq:activemq  /dongguangming/apache-activemq-5.15.9

最後啓動服務

bin/activemq start

查看其運行狀態

bin/activemq status

 

可以通過web管理界面看效果http://192.168.8.200:8161/(ip地址依實際情況而改),默認用戶名admin,密碼admin

 最後可以把activemq設置爲開機服務

創建服務文件

touch /etc/systemd/system/activemq.service

 編輯該文件鍵入以下內容(注意activemq路徑按實際情況寫)

 vi  /etc/systemd/system/activemq.service

[Unit]
Description=Apache ActiveMQ Message Broker
After=network-online.target

[Service]
Type=forking

User=activemq
Group=activemq

WorkingDirectory=/dongguangming/apache-activemq-5.15.9/data
ExecStart=/dongguangming/apache-activemq-5.15.9/bin/activemq start
ExecStop=/dongguangming/apache-activemq-5.15.9/bin/activemq stop
Restart=on-abort


[Install]
WantedBy=multi-user.target

 設置服務文件生效

# systemctl daemon-reload
# systemctl start activemq.service
# systemctl enable activemq.service
# systemctl status activemq.service

 總之,ActiveMQ用途很廣泛,不管是業務場景還是集成到第三方工程框架。

 

參考軟文:

  1. 中間件  https://baike.baidu.com/item/%E4%B8%AD%E9%97%B4%E4%BB%B6/452240?fr=aladdin
  2. 中間件是什麼意思?中間件技術簡介 https://www.redhat.com/zh/topics/middleware/what-is-middleware

  3.  什麼是中間件?常見中間件有哪些? http://c.biancheng.net/view/3860.html
  4.  史上最全數據庫中間件詳解  https://www.sohu.com/a/336811296_505827

  5. 分佈式環境中怎麼選擇緩存中間件? https://www.sohu.com/a/294739348_100212268

  6. IM系統的MQ消息中間件選型:Kafka還是RabbitMQ?https://zhuanlan.zhihu.com/p/37993013

  7. 分佈式事務中間件Seata的設計原理 https://www.sohu.com/a/326431135_661203https://zhuanlan.zhihu.com/p/73263135

  8. ActiveMQ的安裝和基本使用https://blog.51cto.com/mazongfei/2415479

  9. CentOS 7下ActiveMQ安裝配置 https://linuxeye.com/474.html

  10. 消息中間件及ActiveMQ介紹 https://segmentfault.com/a/1190000014958916

  11. ActiveMQ使用筆記 http://www.360doc.com/content/14/0328/08/2795334_364337432.shtml
  12. ActiveMQ學習總結 https://www.cnblogs.com/cxyyh/p/10700437.html

  13. ActiveMQ---知識點整理 http://www.uml.org.cn/zjjs/201802111.asp

  14. 消息中間件學習總結  https://www.ppkanshu.com/index.php/post/3677.html

  15. ActiveMQ 優化 https://www.w3cschool.cn/cuhkj/cuhkj-ld682658.html

  16. ActiveMQ高級特性 https://www.iteye.com/blog/m635674608-2153359

  17. ActiveMQ Redelivery Policy(消息重發策略) https://www.iteye.com/blog/isoftyh-1830288

  18. ActiveMQ高可靠性解決方案 https://www.iteye.com/blog/kavy-2095822

  19. How to Install Apache ActiveMQ on CentOS/RHEL 8

    https://www.tecmint.com/install-apache-activemq-on-centos-rhel/

參考書籍:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章