前言
ActiveMQ 是Apache出品,最流行的,能力強勁的開源消息總線。ActiveMQ 是一個徹底支持JMS1.1和J2EE 1.4規範的 JMS Provider實現,儘管JMS規範出臺已是好久的事情了,可是JMS在當今的J2EE應用中間仍然扮演着特殊的地位。web
在生產項目中,不少時候須要消息中間件來進行分佈式系統間的通訊。它具備低耦合、可靠投遞、廣播、流量控制、最終一致性等一系列功能。sql
概念
點對點或隊列模式docker
包含三個角色:消息隊列(Queue),發送者(Sender),接收者(Receiver)。每一個消息都被髮送到一個特定的隊列,接收者從隊列中獲取消息。隊列保留着消息,直到他們被消費或超時。數據庫
Pub/Sub 發佈/訂閱模式瀏覽器
包含三個角色:主題(Topic),發佈者(Publisher),訂閱者(Subscriber) 。多個發佈者將消息發送到Topic,系統將這些消息傳遞給多個訂閱者。bash
爲了緩和這樣嚴格的時間相關性,JMS容許訂閱者建立一個可持久化的訂閱。這樣,即便訂閱者沒有被激活(運行),它也能接收到發佈者的消息。服務器
若是但願發送的消息能夠不被作任何處理、或者只被一個消息者處理、或者能夠被多個消費者處理的話,那麼能夠採用Pub/Sub模型。網絡
ConnectionFactorysession
建立Connection對象的工廠,針對兩種不一樣的jms消息模型,分別有QueueConnectionFactory和TopicConnectionFactory兩種。能夠經過JNDI來查找ConnectionFactory對象。socket
Destination
Destination的意思是消息生產者的消息發送目標或者說消息消費者的消息來源。對於消息生產者來講,它的Destination是某個隊列(Queue)或某個主題(Topic);對於消息消費者來講,它的Destination也是某個隊列或主題(即消息來源)。
因此,Destination實際上就是兩種類型的對象:Queue、Topic能夠經過JNDI來查找Destination。
Connection
Connection表示在客戶端和JMS系統之間創建的連接(對TCP/IP socket的包裝)。Connection能夠產生一個或多個Session。跟ConnectionFactory同樣,Connection也有兩種類型:QueueConnection和TopicConnection。
Session
Session是操做消息的接口。能夠經過session建立生產者、消費者、消息等。Session提供了事務的功能。當須要使用session發送/接收多個消息時,能夠將這些發送/接收動做放到一個事務中。一樣,也分QueueSession和TopicSession。
消息的生產者
消息生產者由Session建立,並用於將消息發送到Destination。一樣,消息生產者分兩種類型:QueueSender和TopicPublisher。能夠調用消息生產者的方法(send或publish方法)發送消息。
消息消費者
消息消費者由Session建立,用於接收被髮送到Destination的消息。兩種類型:QueueReceiver和TopicSubscriber。可分別經過session的createReceiver(Queue)或createSubscriber(Topic)來建立。固然,也能夠session的creatDurableSubscriber方法來建立持久化的訂閱者。
MessageListener
消息監聽器。若是註冊了消息監聽器,一旦消息到達,將自動調用監聽器的onMessage方法。EJB中的MDB(Message-Driven Bean)就是一種MessageListener。
ActiveMQ目前支持的Transport有:VM Transport、TCP Transport、NIO Transport、SSL Transport、Peer Transport、UDP Transport、Multicast Transport、HTTP and HTTPS Transport、WebSockets Transport、Failover Transport、Fanout Transport、Discovery Transport、ZeroConf Transport等。
AMQ Message Store
ActiveMQ 5.0 的缺省持久化存儲方式。
Kaha Persistence
這是一個專門針對消息持久化的解決方案。它對典型的消息使用模式進行了優化。
JDBC Persistence
目前支持的數據庫有:Apache Derby, Axion, DB2, HSQL, Informix, MaxDB, MySQL, Oracle, Postgresql, SQLServer, Sybase。
Disable Persistence
不該用持久化存儲。
Pure Master Slave
Shared File System Master Slave
JDBC Master Slave
安裝說明
這裏使用Docker安裝,查詢Docker鏡像:
docker search activemq複製代碼
下載Docker鏡像:
docker pull webcenter/activemq複製代碼
建立&運行ActiveMQ容器:
docker run -d --name myactivemq -p 61617:61616 -p 8162:8161 webcenter/activemq複製代碼
61616是 activemq 的容器使用端口(映射爲61617),8161是 web 頁面管理端口(對外映射爲8162)
查看建立的容器,若是存在說明安裝成功:
docker ps複製代碼
查看WEB管理頁面:
瀏覽器輸入http://ip:8162 點擊Manage ActiveMQ broker使用默認帳號/密碼:admin/admin進入查看。
進入Docker容器:
docker exec -it myactivemq /bin/bash複製代碼
控制檯界面設置用戶名和密碼:
# 位於根目錄 conf 目錄下
vi jetty-realm.properties
# 修改密碼
# username: password [,rolename ...]
admin: admin, admin複製代碼
編輯activemq.xml文件,放置到 shutdownHooks 下方便可。
<!-- 添加訪問ActiveMQ的帳號密碼 -->
<plugins>
<simpleAuthenticationPlugin>
<users>
<authenticationUser username="${activemq.username}" password="${activemq.password}" groups="users,admins"/>
</users>
</simpleAuthenticationPlugin>
</plugins>
複製代碼
修改conf中credentials.properties文件進行密碼設置:
activemq.username=admin
activemq.password=123456
guest.password=123456複製代碼
若是是雲服務器,記得開放相關端口(61617/8160)