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