linux下activemq安裝與配置


什么是消息中間件(MQ)?

1.1 為什么會需要消息隊列(MQ)?

  主要原因是由於在高並發環境下,由於來不及同步處理,請求往往會發生堵塞,比如說,大量的insert,update之類的請求同時到達MySQL,直接導致無數的行鎖表鎖,甚至最后請求會堆積過多,從而觸發too many connections錯誤。通過使用消息隊列,我們可以異步處理請求,從而緩解系統的壓力。

2.2 什么是消息中間件

  消息中間件利用高效可靠的消息傳遞機制進行平台無關的數據交流,並基於數據通信來進行分布式系統的集成。通過提供消息傳遞和消息排隊模型,它可以在分布式環境下擴展進程間的通信。對於消息中間件,常見的角色大致也就有Producer(生產者)、Consumer(消費者)
  常見的消息中間件產品:
  (1)ActiveMQ
  ActiveMQ 是Apache出品,最流行的,能力強勁的開源消息總線。ActiveMQ 是一個完全支持JMS1.1和J2EE 1.4規范的 JMS Provider實現。我們在本次課程中介紹 ActiveMQ的使用。
  (2)RabbitMQ
  AMQP協議的領導實現,支持多種場景。淘寶的MySQL集群內部有使用它進行通訊,OpenStack開源雲平台的通信組件,最先在金融行業得到運用。
  (3)ZeroMQ
  史上最快的消息隊列系統
  (4)Kafka
  Apache下的一個子項目 。特點:高吞吐,在一台普通的服務器上既可以達到10W/s的吞吐速率;完全的分布式系統。適合處理海量數據。

 

 

ActiveMQ

ActiveMQ是Apache的一個開源項目,它是一個能力強勁的開源消息總線,也是一個中間件產品。它是JMS的一個實現。

首先了解一下JMS

JMS(Java Messaging Service)是Java平台上有關面向消息中間件的技術規范,它便於消息系統中的Java應用程序進行消息交換,並且通過提供標准的產生、發送、接收消息的接口簡化企業應用的開發。

JMS是Java Message Service的簡稱,用來發送異步消息,在不同系統和不同的模塊之間我們可以利用它實現集成。
JMS有兩個好處:第一個就是讓模塊之間或者系統之間的耦合度降低,第二個是異步通信

JMS本身只定義了一系列的接口規范,是一種與廠商無關的 API,用來訪問消息收發系統。它類似於 JDBC(java Database Connectivity):這里,JDBC 是可以用來訪問許多不同關系數據庫的 API,而 JMS 則提供同樣與廠商無關的訪問方法,以訪問消息收發服務。許多廠商目前都支持 JMS,包括 IBM 的 MQSeries、BEA的 Weblogic JMS service和 Progress 的 SonicMQ,這只是幾個例子。 JMS 使您能夠通過消息收發服務(有時稱為消息中介程序或路由器)從一個 JMS 客戶機向另一個 JML 客戶機發送消息。消息是 JMS 中的一種類型對象,由兩部分組成:報頭和消息主體。報頭由路由信息以及有關該消息的元數據組成。消息主體則攜帶着應用程序的數據或有效負載。
JMS 定義了五種不同的消息正文格式,以及調用的消息類型,允許你發送並接收以一些不同形式的數據,提供現有消息格式的一些級別的兼容性。

· TextMessage--一個字符串對象
· MapMessage--一套名稱-值對
· ObjectMessage--一個序列化的 Java 對象
· BytesMessage--一個字節的數據流
· StreamMessage -- Java 原始值的數據流

JMS的消息機制有2種模型

一種是Point to Point,表現為隊列的形式。發送的消息,只能被一個接收者取走;

 

另一種是Topic,可以被多個訂閱者訂閱,類似於群發。

 

在JMS中有這樣幾個重要的核心接口和類:

ConnectionFactory:用於jms client獲取與jms provider的連接。不同的jms產品,對這個接口有不同的實現,比如說ActiveMQ,這個接口的實現類是ActiveMQConnectionFactory
Connection:是由ConnectionFactory產生的,表示jms client與jms provider的連接
Session:是由Connection產生的,表示一個會話。Session是關鍵組件,Message、Producer/Consumer、Destination都是在Session上創建的
Message:這個組件很好理解,就是傳輸的消息,里面包括head、properties、body,其中head是必選的
Destination:是消息源,對發送者來說,就是消息發到哪里;對接收者來說,就是從哪里取消息。Destination有2個子接口,Queue和Topic,分別對應上面提到的2種模型
MessageProducer:是消息發送者
MessageConsumer:是消息接收者,和Message Producer是相反的一種組件

JMS有所了解之后,我們來看ActiveMQ

ActiveMQ特性

  • 遵循JMS規范:ActiveMQ的各種特性是JMS1.1規范的實現。它們包括同步和異步消息傳遞,一次和只有一次的消息傳遞,對於預訂者的持久消息等等。依附於JMS規范意味着,不論JMS消息提供者是誰,同樣的基本特性都是有效的。
  • 連接:ActiveMQ提供各種連接選擇,包括HTTP,HTTPS,IP多點傳送,SSL,STOMP,TCP,UDP,XMPP等。大量的連接協議支持使之具有更好的靈活性。
  • 支持多種語言客戶端:ActiveMQ對多種語言提供客戶端API,除了Java之外還有C/C++、.NET、Perl、PHP、Ruby、Python等。這使得ActiveMQ能用在Java之外的其它語言中。很多其它語言都可以通過ActiveMQ提供的客戶端API使用ActiveMQ的全部特性。當然,ActiveMQ代理器(broker)仍然是運行在java虛擬機上,但是客戶端能夠使用其它的被支持的語言。
  • 可插拔的持久性和安全:ActiveMQ提供多種持久性方案可供選擇,也可以完全按自己需求定制驗證和授權。例如,ActiveMQ通過KahaDB提供自己的超快速消息持久方案(ultra-fast message persistence),但也支持標准的JDBC方案。ActiveMQ可以通過配置文件提供簡單的驗證和授權,也提供標准的JAAS登陸模塊。
  • 簡單的管理:ActiveMQ是為開發者設計的。它並不需要專門的管理工具,因為它提供各種易用且強大的管理特性。有很多方法去監控ActiveMQ的各個方面,可以通過JMX使用JConsole或ActiveMQ web console;可以運行ActiveMQ消息報告;可以用命令行腳本;可以通過日志。
  • 支持集群:為了利於擴展,多個ActiveMQ broker能夠聯合工作。這個方式就是network of brokers並且能支持多種拓撲結構。

ActiveMQ的安裝

  • AMQtar包上傳至指定文件夾(如:/home/cspgs
  • 進入部署目錄,解壓文件(我這里的部署路徑是/home/cspgs
命令:tar -zxvf apache-activemq-5.12.1-bin.tar.gz

    並將解壓后的目錄名改為activemq

命令:mv apache-activemq-5.12.1 activemq

為了能夠使用JMX監控遠程的ActiveMQ,我們需要對ActiveMQ進行配置,以使JMX能夠正確連接到遠程的ActiveMQ監控服務。

  • 進入activemq目錄,修改conf目錄下的activemq.xml文件,修改2個地方
命令:vi conf/activemq.xml

 

(1)修改broker屬性中的字段,添加 useJmx= "true"

 修改后:

(2)在文件中將managementContext的內容修改為下面的內容

<managementContext>
      <managementContext createConnector="true" connectorPort="11099" />
</managementContext>

 默認:

  • 查看端口是否被占用

Activemq有這幾個端口,分別是: 

conf目錄的activemq.xml5個端口

以及conf目錄下jetty.xml1個端口

 

查看端口是否被占用命令,xxx為端口:

netstat -apn | grep xxx
端口未被占用如下:

端口被占用如下:

LISTEN那一行,表示被占用。

LISTENING並不表示端口被占用,不要和LISTEN混淆哦,查看具體端口時候,必須要看到tcp,端口號,LISTEN那一行,才表示端口被占用了

  • 進入ActiveMQ啟動目錄下
命令:cd bin/linux-x86-64

  • 啟動ActiveMQ,並查看進程,amq啟動后會有2個進程
命令:./activemq start
查看進程:ps -ef | grep activemq

  • 檢驗ActiveMQ是否啟動成功

在瀏覽器輸入url地址http://ip:8161/admin

比如我的地址是http://192.168.80.72:8161/admin

有的訪問需要用戶和密碼:admin/admin

出現這個頁面表示已經啟動成功

  • 如果activemq沒有啟動成功,查看日志文件,分析原因具體解決,日志文件位於logs目錄下的activemq.log文件
  • IPv6配置更改不需要更改任何配置信息。

  • IPv6應用連接

    程序連接地址需要修改為IPv6地址

    flow.queue.url=tcp://[fd15:4ba5:5a2b:1008:20c:29ff:fe45:98c7]:61616

  • 驗證IPv6過程

IPv6地址訪問ActiveMQ,訪問成功。

瀏覽器訪問地址:http://[fd15:4ba5:5a2b:1008:20c:29ff:fe45:98c7]:8161/admin/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM