當系統業務量不是太大(未到百萬千萬過億時),使用訊息中間件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用途很廣泛,不管是業務場景還是集成到第三方工程框架,

?
參考軟文:
- 中間件 https://baike.baidu.com/item/%E4%B8%AD%E9%97%B4%E4%BB%B6/452240?fr=aladdin
-
中間件是什么意思?中間件技術簡介 https://www.redhat.com/zh/topics/middleware/what-is-middleware
- 什么是中間件?常見中間件有哪些? http://c.biancheng.net/view/3860.html
-
史上最全資料庫中間件詳解 https://www.sohu.com/a/336811296_505827
-
分布式環境中怎么選擇快取中間件? https://www.sohu.com/a/294739348_100212268
-
IM系統的MQ訊息中間件選型:Kafka還是RabbitMQ?https://zhuanlan.zhihu.com/p/37993013
-
分布式事務中間件Seata的設計原理 https://www.sohu.com/a/326431135_661203,https://zhuanlan.zhihu.com/p/73263135
-
ActiveMQ的安裝和基本使用https://blog.51cto.com/mazongfei/2415479
-
CentOS 7下ActiveMQ安裝配置 https://linuxeye.com/474.html
-
訊息中間件及ActiveMQ介紹 https://segmentfault.com/a/1190000014958916
- ActiveMQ使用筆記 http://www.360doc.com/content/14/0328/08/2795334_364337432.shtml
-
ActiveMQ學習總結 https://www.cnblogs.com/cxyyh/p/10700437.html
-
ActiveMQ---知識點整理 http://www.uml.org.cn/zjjs/201802111.asp
-
訊息中間件學習總結 https://www.ppkanshu.com/index.php/post/3677.html
-
ActiveMQ 優化 https://www.w3cschool.cn/cuhkj/cuhkj-ld682658.html
-
ActiveMQ高級特性 https://www.iteye.com/blog/m635674608-2153359
-
ActiveMQ Redelivery Policy(訊息重發策略) https://www.iteye.com/blog/isoftyh-1830288
-
ActiveMQ高可靠性解決方案 https://www.iteye.com/blog/kavy-2095822
-
How to Install Apache ActiveMQ on CentOS/RHEL 8
https://www.tecmint.com/install-apache-activemq-on-centos-rhel/
參考書籍:
- O'Reilly - Java Message Service https://github.com/dongguangming/java/blob/master/O'Reilly%20-%20Java%20Message%20Service.pdf
- ActiveMQ in Action https://github.com/dongguangming/java/blob/master/ActiveMQ%20in%20Action.pdf
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/158269.html
標籤:Java
