1. 程式人生 > >activeMQ 講解及實戰

activeMQ 講解及實戰

安全 持久化數據 sts 路徑 code rtu 默認值 字符 更新

#### 軟件架構
項目中需要用到activeMQ
下載地址:http://activemq.apache.org/download.html

#### 安裝教程
需要安裝jdk環境
activeMQ免安裝下載完成後在
./bin/activemq start :啟動服務
./bin/activemq stop :停止服務
./bin/activemq restart :重啟 服務


#### 使用說明

## com.abel.main 包下的類 簡單demo 測試成功即可
## transcation 包下的是事務提交數據
## onmessage 包下的監聽消息隊列,有消息進來就可以接收到
## publis.subscribe 發布/訂閱模式

## activeMQ 安全認證 : 指定用戶進行數據發布和監聽
* ./conf/activeMQ 中的broker標簽 中增加

<plugins>
    <!-- use JAAS to authenticate using the login.config file on the classpath to configure JAAS -->
    <!-- 添加jaas認證插件activemq在login.config裏面定義,詳細見login.config-->
    <jaasauthenticationplugin configuration="
activemq"></jaasauthenticationplugin> <!-- lets configure a destination based authorization mechanism --> <authorizationplugin> <map> <authorizationmap> <authorizationentries> <authorizationentry topic="
>" read="admins" write="admins" admin="admins"> <authorizationentry queue=">" read="admins" write="admins" admin="admins"> <authorizationentry topic="ActiveMQ.Advisory.>" read="admins" write="admins" admin="admins"> <authorizationentry queue="ActiveMQ.Advisory.>" read="admins" write="admins" admin="admins"> </authorizationentry></authorizationentry></authorizationentry></authorizationentry></authorizationentries> </authorizationmap> </map> </authorizationplugin> </plugins>

* ./conf/login.config 中設置用戶和租信息

activemq {
    org.apache.activemq.jaas.PropertiesLoginModule required
    org.apache.activemq.jaas.properties.user = "users.properties"
    org.apache.activemq.jaas.properties.group = "groups.properties";
};

* ./conf/users.properties 中設置用戶
> 用戶名=密碼
* ./conf/groups.properties
> 組名=用戶名,用戶名1

## persistence 持久化測試
* kahadb方式
* 是ActiveMQ默認的持久化策略。kahadb是一個文件型數據庫。是使用內存+文件保證數據的持久化的。kahadb可以限制每個數據文件的大小。不代表總計數據容量

<persistenceadapter>
    <!-- directory:保存數據的目錄; journalMaxFileLength:保存消息的文件大小 -->
    <kahadb directory="${activemq.data}/kahadb" journalmaxfilelength="16mb"></kahadb>
</persistenceadapter>


* 特性是
1、日誌形式存儲消息;2、消息索引以B-Tree結構存儲,可以快速更新;3、完全支持JMS事務;4、支持多種恢復機制;
* jdbc 模式
* ./conf/activemq.xml broker標簽中的persistenceAdapter
由默認kahadb 改為persistenceAdapter jdbc 持久化標簽
dataSource指定持久化數據庫的bean,createTablesOnStartup是否在啟動的時候創建數據表,默認值是true,這樣每次啟動都會去創建數據表了,一般是第一次啟動的時候設置為true,之後改成false。

<jdbcpersistenceadapter datasource="#mysql-ds" createtablesonstartup="true"></jdbcpersistenceadapter>
* undefined標簽之外增加數據庫配置內容
undefined<bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost/activemq?relaxAutoCommit=true"></property>
<property name="username" value="activemq"></property>
<property name="password" value="activemq"></property>
<property name="maxActive" value="200"></property>
<property name="poolPreparedStatements" value="true"></property>undefined</bean>

* 說明1:配置成功後可能出現缺包的狀況 需要增加 mysql驅動及jdbc連接池的jar包
commons-pool、commons-dbcp、mysql-connector-java
* 說明2: 創建數據庫的時候數據庫的的字符集為:latin1 否則activemq_acks 表無法初始化創建

## springmvc 整合 模塊mvnproducer 發送消息 mvcconsumer 接受消息並處理
#* colony activeMQ 主從
* zk 集群安裝步驟
* zookeeper 免安裝 減壓完成後需要在裏面創建一個myid文件,裏面設置zk的編號(智能是大與等於1的自然數) echo 1 >> myid
* conf/zoo_sample.cfg 屬於模板文件,需要重新復制一個zoo.cfg文件 zk默認訪問的是此文件,修改此文件:
* 1、dataDir: zk文件路徑/data
* 2、clientPort: 多個zk的端口設置的不一樣
* 3、server.編號=IP:投票端口:選舉端口 投票端口: 用於決定正在運行的主機是否宕機. 選舉端口: 用於決定哪一個Zookeeper服務作為主機 多個zk配置多個server 配置應該一樣
* 啟動所有zk zk/bin/zkServer.sh start
* 查看zk 狀態 zk/bin/zkServer.sh status 查看 Mode: leader 表示主機 Mode: follower 表示從機
* activeMQ 集群安裝步驟
* 修改多個jetty.xml 的端口號不一樣
* 修改activemq.xml 中的標簽broker中的brokerName屬性的名稱設為一致的
* 修改持久化配置信息 broker 標簽中的 persistenceAdapter 信息
* replicas屬性代表當前主從模型中的節點數量
* bind屬性中的端口為主從實例之間的通訊端口。代表當前實例對外開放端口是什麽,三個實例分別使用62626、62627、62628端口
* zkAddress屬性代表ZooKeeper安裝位置,安裝具體情況設置。
* zkPath是ActiveMQ主從信息保存到ZooKeeper中的什麽目錄內
* hostname為ActiveMQ實例安裝Linux的主機名,可以在/etc/hosts配置文件中設置。設置格式為:IP 主機名。 如: 127.0.0.1 mq-server

<persistenceadapter>
    <!-- <kahaDB directory="${activemq.data}/kahadb"></kahaDB> -->
    <replicatedleveldb directory="${activemq.data}/levelDB" replicas="3" bind="tcp://0.0.0.0:62626" zkaddress="192.168.26.50:2181,192.168.26.50:2182,192.168.26.50:2183" zkpath="/activemq/leveldb-stores" hostname="mq-server"></replicatedleveldb>
</persistenceadapter>

* 修改activemq.xml對外提供的服務端口。原默認端口為61616
* 查詢activemq中的主從服務
* 進入zk客戶端進行查看 zk/bin/zkCli.sh
* ls /activemq/leveldb-stores/ 有幾個activeMQ 下面就會顯示幾個
* get /activemq/leveldb-stores/00000000004 其中屬性 elected:000000 表示主 selected:null 表示從

項目地址

activeMQ 講解及實戰