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:

*如果你感到枯燥的話,那就過會再來看看吧,原理性的東西,嗯,蠻重要的