企業實戰(12)消息隊列之Docker安裝部署ActiveMQ實戰

什麼是消息中間件

 消息中間件顧名思義實現的就是在兩個系統或兩個客戶端之間進行消息傳送。
在這裏插入圖片描述

什麼是ActiveMQ

 ActiveMQ是一種開源的基於JMS(Java Message Servie)規範的一種消息中間件的實現,ActiveMQ的設計目標是提供標準的,面向消息的,能夠跨越多語言和多系統的應用集成消息通信中間件。

什麼時候需要用ActiveMQ

 ActiveMQ常被應用與系統業務的解耦,異步消息的推送,增加系統併發量,提高用戶體驗。例如以我在工作中的使用,在比較耗時且異步的遠程開鎖操作時。
在這裏插入圖片描述

如何使用ActiveMQ

1.AcitveMQ的數據傳送流程
在這裏插入圖片描述
2.ActiveMQ的兩種消息傳遞類型

(1)點對點模式

  • 每個消息只有一個消費者(Consumer),即一旦被消費,消息就不再在消息隊列中。
  • 發送者和接收者之間在時間上沒有依賴性,也就是說當發送者發送了消息之後,不管接收者有沒有正在運行,它不會影響到消息被髮送到隊列。
  • 接收者在成功接收消息之後需向隊列應答成功。

(2)基於發佈/訂閱模式

 包含三個角色:主題(Topic),發佈者(Publisher),訂閱者(Subscriber) 。多個發佈者將消息發送到Topic,系統將這些消息傳遞給多個訂閱者。

  • 每個消息可以有多個消費者
  • 發佈者和訂閱者之間有時間上的依賴性。針對某個主題(Topic)的訂閱者,它必須創建一個訂閱者之後,才能消費發佈者的消息。
  • 爲了消費消息,訂閱者必須保持運行的狀態。

 爲了緩和這樣嚴格的時間相關性,JMS允許訂閱者創建一個可持久化的訂閱。這樣,即使訂閱者沒有被激活(運行),它也能接收到發佈者的消息。

 如果希望發送的消息可以不被做任何處理、或者只被一個消息者處理、或者可以被多個消費者處理的話,那麼可以採用Pub/Sub模型。

兩種消息傳遞類型的不同,點對點傳輸消費者可以接收到在連接之前生產者所推送的數據,而基於發佈/訂閱模式的傳輸方式消費者只能接收到連接之後生產者推送的數據。

集羣方案(Master / Slave)

Pure Master Slave

  • 無單點故障;
  • 不需要依賴共享文件系統或是共享數據庫,使用 KahaDB的方式持久化存儲;
  • 一個Master只能帶一個Slave;
  • Master工作期間,會將消息狀況自動同步到Slave;
  • Master一旦崩潰,Slave自動接替其工作,已發送並尚未消費的消息繼續有效;
  • Slave接手後,必須停止Slave才能重啓先前的Master;

Shared File System Master Slave

JDBC Master Slave

  • 配置上,不存在Master和Slave的區分,多個共享數據源的Broker構成JDBC Master Slave;
  • 首先搶到資源(數據庫鎖)的Broker成爲Master,其他Broker定期嘗試搶佔資源;
  • 一旦Master崩潰,其他Broker搶佔資源,最終只有一臺搶到,立刻成爲Master,之前的Master即便重啓成功,也只能作爲Slave等待;

ActiveMQ部署

1.查找activemq鏡像

[root@test2 ~]# docker search activemq
NAME                                     DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
webcenter/activemq                       ActiveMQ 5.14.3 with OpenJDK-jre-8-headless …   173                                     [OK]
rmohr/activemq                           Various versions of ActiveMQ neatly packet i…   118                                     [OK]
vromero/activemq-artemis                 ActiveMQ Artemis image (Debian and Alpine ba…   29                                    

2.拉取activemq鏡像

[root@test2 ~]# docker pull webcenter/activemq
Using default tag: latest
latest: Pulling from webcenter/activemq
7dcf5a444392: Downloading [==================>                                ]  18.68MB/51.07MB
9eebba75a87f: Download complete
1f0440d87cc7: Download complete
dacd0555c1b4: Download complete
b0f19aa05a94: Downloading [===========================================>       ]  48.25MB/55.76MB
4796f64423b2: Downloading [====>                                              ]  1.973MB/24.05MB
5d994b710cb9: Waiting

[root@test2 ~]# docker images
webcenter/activemq              latest                   3af156432993        3 years ago         422MB

3.運行activemq容器

61616是 activemq 的容器使用端口,8161是 web 頁面管理端口

-d:後臺運行容器

--name:指定容器名

-p:指定服務運行的端口(61616:應用訪問端口;8161:控制檯Web端口號)

webcenter/activemq:鏡像名

[root@test2 ~]# docker run -itd --name activemq -p 61616:61616 -p 8161:8161 webcenter/activemq
6f3ad16a8abdfa16eea6e86cf096061da1118c9d648d2ab84600fe24d987def4

[root@test2 ~]# docker ps
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                                                                                        NAMES
6f3ad16a8abd        webcenter/activemq    "/app/run.sh"            4 minutes ago       Up 3 minutes        1883/tcp, 5672/tcp, 0.0.0.0:8161->8161/tcp, 61613-61614/tcp, 0.0.0.0:61616->61616/tcp        activemq

[root@test2 ~]# ss -antulp | grep :61616
tcp    LISTEN     0      128      :::61616                :::*                   users:(("docker-proxy",pid=81001,fd=4))

[root@test2 ~]# ss -antulp | grep :8161
tcp    LISTEN     0      128      :::8161                 :::*                   users:(("docker-proxy",pid=81013,fd=4))

4.查看ActiveMQ容器進程信息

[root@test2 ~]# docker top activemq
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                81039               81019               0                   17:29               pts/0               00:00:01            /usr/bin/python /usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf
root                81079               81039               0                   17:29               pts/0               00:00:00            /usr/sbin/cron -f
root                81080               81039               0                   17:29               pts/0               00:00:00            sh -c "/usr/bin/java" -Xms64M -Xmx1G -Djava.util.logging.config.file=logging.properties -Djava.security.auth.login.config=/opt/activemq/conf.tmp/login.config -Dcom.sun.management.jmxremote -Djava.awt.headless=true -Djava.io.tmpdir="/opt/activemq//tmp" -Dactivemq.classpath="/opt/activemq/conf.tmp:/opt/activemq//../lib/:" -Dactivemq.home="/opt/activemq/" -Dactivemq.base="/opt/activemq/" -Dactivemq.conf="/opt/activemq/conf.tmp" -Dactivemq.data="/data/activemq" -jar "/opt/activemq//bin/activemq.jar" start ;
root                81123               81080               14                  17:29               pts/0               00:01:05            /usr/bin/java -Xms64M -Xmx1G -Djava.util.logging.config.file=logging.properties -Djava.security.auth.login.config=/opt/activemq/conf.tmp/login.config -Dcom.sun.management.jmxremote -Djava.awt.headless=true -Djava.io.tmpdir=/opt/activemq//tmp -Dactivemq.classpath=/opt/activemq/conf.tmp:/opt/activemq//../lib/: -Dactivemq.home=/opt/activemq/ -Dactivemq.base=/opt/activemq/ -Dactivemq.conf=/opt/activemq/conf.tmp -Dactivemq.data=/data/activemq -jar /opt/activemq//bin/activemq.jar start

修改訪問密碼

[root@test2 ~]# docker exec -it activemq /bin/bash
root@6f3ad16a8abd:/opt/activemq# ls
LICENSE  README.txt               bin   conf.tmp  docs      lib  webapps
NOTICE   activemq-all-5.14.3.jar  conf  data      examples  tmp  webapps-demo

root@6f3ad16a8abd:/opt/activemq# vim conf.tmp/jetty-realm.properties
...
# Defines users that can access the web (console, demo, etc.)
# username: password [,rolename ...]
admin: admin, admin         //修改密碼
user: user, user

配置連接密碼

 編輯activemq.xml文件,配置放到 shutdownHooks 下方。

root@6f3ad16a8abd:/opt/activemq# vim conf.tmp/activemq.xml
...
121         <shutdownHooks>
122             <bean xmlns="http://www.springframework.org/schema/beans" class="org.apache.activemq.hooks.SpringContextHook" /    >
123         </shutdownHooks>
<!-- 此處添加訪問ActiveMQ的賬號密碼 -->
<plugins>
    <simpleAuthenticationPlugin>
        <users>
            <authenticationUser username="${activemq.username}" password="${activemq.password}" groups="users,admins"/>
        </users>
    </simpleAuthenticationPlugin>
</plugins>
...
                 ||
                 ||
root@6f3ad16a8abd:/opt/activemq# vim conf.tmp/credentials.properties
# Defines credentials that will be used by components (like web console) to access the broker
activemq.username=system      //修改用戶
activemq.password=manager     //修改密碼
guest.password=password

訪問ActiveMQ控制檯

默認賬號/密碼:admin/admin
8161是 web 頁面管理端口
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

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