ActiveMQ學習總結——入門篇01
- 2019 年 10 月 10 日
- 筆記
註:*這篇博文文章主要介紹ActiveMQ是什麼原理性的內容和如何安裝和簡易操作
一、 ActiveMQ 簡介
1 ActiveMQ是什麼呢?看起來好碉堡的東西哇!
ActiveMQ 是 Apache 出品,最流行的,能力強勁的開源消息匯流排。ActiveMQ 是一個
完全支援 JMS1.1 和 J2EE 1.4 規範的 JMS Provider 實現,儘管 JMS 規範出台已經是很久
的事情了,但是 JMS 在當今的 J2EE 應用中間仍然扮演著特殊的地位。
2 什麼是消息呢?
大家對消息的這個詞肯定不會陌生,那麼在我們ActiveMQ裡面指的是什麼,我想你應該有必要了解下
“消息”是在兩台電腦間傳送的數據單位。消息可以非常簡單,例如只包含文本字元串;
也可以更複雜,可能包含嵌入對象。
3 什麼是隊列?
我覺的下面的這張圖對大家而言,相比已經很清楚了(能學到MQ都很了不起啦!)
4 什麼是 消息隊列?
簡單來說:
“消息隊列”是在消息的傳輸過程中保存消息的容器。
舉個小例子:比如你在qq上根你朋友倆天,聊天肯定是雙方的,那麼你發給你朋友的消息就是存儲在這個騰訊的伺服器中(理解為消息隊列)的,當你朋友上線(登錄QQ)的時候,就從伺服器中收到了這條消息
是不是看起來很高大上,起始很容易了解,哈哈
5 常用消費服務應用
5.1 ActiveMQ
ActiveMQ 是 Apache 出品,最流行的,能力強勁的開源消息匯流排。ActiveMQ 是一個完
全支援 JMS1.1 和 J2EE 1.4 規範的 JMS Provider 實現。(也是我們本次用的喔!)5.2 RabbitMQ
RabbitMQ 是一個在 AMQP 基礎上完成的,可復用的企業消息系統。他遵循 Mozilla Public
License 開源協議。開發語言為 Erlang。5.3 RocketMQ
由阿里巴巴定義開發的一套消息隊列應用服務。
二、消息服務的應用場景
消息隊列的主要特點是非同步處理,主要目的是減少請求響應時間和解耦。所以主要的使
用場景就是將比較耗時而且不需要即時(同步)返回結果的操作作為消息放入消息隊列。同
時由於使用了消息隊列,只要保證消息格式不變,消息的發送方和接收方並不需要彼此聯繫,
也不需要受對方的影響,即解耦和。
5.1 非同步處理
例如:用戶註冊
用戶註冊流程:
1)註冊處理以及寫資料庫
2)發送註冊成功的手機簡訊
3)發送註冊成功的郵件資訊
如果用消息中間件:則可以創建兩個執行緒來做這些事情,直接發送消息給消息中間件,
然後讓郵件服務和簡訊服務自己去消息中間件裡面去取消息,然後取到消息後再自己做對應
的業務操作。就是這麼方便
5.2 應用的解耦
例如:訂單處理
生成訂單流程:
1)在購物車中點擊結算
2)完成支付
3)創建訂單
4)調用庫存系統
訂單完成後,訂單系統並不去直接調用庫存系統,而是發送消息到消息中間件,寫入一
個訂單資訊。庫存系統自己去消息中間件上去獲取,然後做發貨處理,並更新庫存,這樣能
夠實現互聯網型應用追求的快這一個屬性。而庫存系統讀取訂單後庫存應用這個操作也是非
常快的,所以有消息中間件對解耦來說也是一個不錯的方向。
5.3 流量的消峰
例如:秒殺功能
秒殺流程:
1)用戶點擊秒殺
2)發送請求到秒殺應用
3)在請求秒殺應用之前將請求放入到消息隊列
4)秒殺應用從消息隊列中獲取請求並處理。
比如,系統舉行秒殺活動,熱門商品。流量蜂擁而至 100 件商品,10 萬人擠進來怎麼
辦?10 萬秒殺的操作,放入消息隊列。秒殺應用處理消息隊列中的 10 萬個請求中的前 100
個,其他的打回,通知失敗。流量峰值控制在消息隊列處,秒殺應用不會瞬間被懟死
三、 JMS
1 什麼是 JMS
JMS(Java Messaging Service)是 Java 平台上有關面向消息中間件的技術規範,它便於
消息系統中的 Java 應用程式進行消息交換,並且通過提供標準的產生、發送、接收消息的接
口,簡化企業應用的開發,也就是Java幫我們定義的一套規範
2 JMS模型
2.1 點對點模型(Point To Point)
生產者發送一條消息到 queue,只有一個消費者能收到。
例如:你給你的好友發送一條消息,那麼只有他能知道你發了啥
2.2 發布訂閱模型(Publish/Subscribe)
發布者發送到 topic 的消息,只有訂閱了 topic 的訂閱者才會收到消息。
例如:你在教室裡面大喊“我不要當碼農!”,那麼在教室的所有人都會聽見。
*學到後面的時候,你將知道,我為什麼舉得這兩個例子命名可以都在一個條件下成立,為什麼還換到了另一個不著邊際的立場點上。
四、 ActiveMQ 安裝
準備環境:Linux
1 下載資源
ActiveMQ 官網: http://activemq.apache.org
版本說明
ActiveMQ5.10.x 以上版本必須使用 JDK1.8 才能正常使用。
ActiveMQ5.9.x 及以下版本使用 JDK1.7 即可正常使用。根據自己的JDK版本酌情而定,初學者不必太糾結版本問題,我這裡採用的是ActiveMQ5.9.0版本
2 上傳至 Linux 伺服器
3 解壓安裝文件
tar -zxf apache-activemq-5.9.0-bin.tar.gz
4 檢查許可權(大部分都沒事的,可以略過)
ls -al apache-activemq-5.9.0/bin 如果許可權不足,則無法執行,需要修改文件許可權: chmod 755 activemq
5 複製應用至本地目錄
cp -r apache-activemq-5.9.0 /usr/local/activemq
6 啟動 ActiveMQ
/usr/local/activemq/bin/activemq start
7 測試 ActiveMQ
檢查進程
ps aux | grep activemq
見到下述內容即代表啟動成功
7.2 管理介面
使用瀏覽器訪問 ActiveMQ 管理應用, 地址如下:
http://ip:8161/admin/
用戶名: admin
密碼: admin
ActiveMQ 使用的是 jetty 提供 HTTP 服務.啟動稍慢,建議短暫等待再訪問測試.
見到如下介面代表服務啟動成功
7.3 修改訪問埠(如果你想的話)
修改 ActiveMQ 配置文件: /usr/local/activemq/conf/jetty.xml
配置文件修改完畢,保存並重新啟動 ActiveMQ 服務
7.4 修改用戶名和密碼
修改 conf/users.properties 配置文件.內容為: 用戶名=密碼
保存並重啟 ActiveMQ 服務即可
8 重啟 ActiveMQ
/usr/local/activemq/bin/activemq restart
9 關閉 ActiveMQ
/usr/local/activemq/bin/activemq stop
10 配置文件 activemq.xm
自行在vim裡面輸入ese /61616搜索下位置哈(虛擬機壞了,按時不做截圖了)
配置文件中,配置的是 ActiveMQ 的核心配置資訊. 是提供服務時使用的配置. 可以修改
啟動的訪問埠. 即 java 編程中訪問 ActiveMQ 的訪問埠.
默認埠為 61616.
使用協議是: tcp 協議.
修改埠後, 保存並重啟 ActiveMQ 服務即可.
11 ActiveMQ
從它的目錄來說,還是很簡單的:
* bin 存放的是腳本文件
* conf 存放的是基本配置文件
* data 存放的是日誌文件
* docs 存放的是說明文檔
* examples 存放的是簡單的實例
* lib 存放的是 activemq 所需 jar 包
* webapps 用於存放項目的目錄
ps:
*如果你感到枯燥的話,那就過會再來看看吧,原理性的東西,嗯,蠻重要的