今天看下如何使用HornetQ,主要包括如何啓動,停止HornetQ服務以及如何配置一些參數。
問題1: HornetQ服務怎麼啓動和停止?
HornetQ的目錄結構如下,在bin目錄下有run.bat(Windows),run.sh(Linux)啓動服務,stop.bat(Windows),stop.sh(Linux)停止服務
出於好奇,我們就打開run.sh看看裏面都設置了哪些東東。
主要設置了日誌目錄,CLASSPATH,$CONFIG_DIR,JVM等一些參數,並且在默認條件下啓動腳本讀取的是config/stand-alone/non-clustered目錄下的配置文件
// run.sh
問題2:HornetQ有哪幾種配置方式?
有4種配置方式,它們分別是:
-
非集羣方式的獨立服務器配置
-
集羣方式的獨立服務器配置
-
非集羣方式運行於JBoss應用服務器
-
集羣方式運行於JBoss應用服務器
config目錄下可以看到不同方式的配置文件
1)獨立部署的集羣和非集羣配置目錄
2)應用於Jboss服務器的集羣和非集羣配置目錄
問題3:各個配置文件作用都是什麼?
每種配置方式都包含hornetq-beans.xml/hornetq-configuration.xml/hornetq-jms.xml等幾個配置文件,我們就以standalone-non-culstered方式爲例,來看看各個配置文件都是配置什麼的,作用是什麼?
1)hornetq-beans.xml
note:如果是運行在JBoss應用服務器內,則爲 hornetq-jboss-beans.xml
這裏面定義了HornetQ中用到的各個bean,以及各個bean之間的依賴關係,這些bean被Jboss Microcontainer裝載和運行。
以下內容引用自HornetQ 2.1用戶手冊
-
JNDIServer
很多客戶端需要JNDI來獲取JMS的對象,因此我們提供了一個JNDI服務來滿足它們。如果不需要JNDI,可以在配置 文件中將它們註釋掉。
-
MBeanServer
這個對象提供了JMX管理接口。它是一個MBean服務器,可管理的對象可以註冊到這個服務器上。 通常這就是一個JVM內部的默認的平臺MBean服務器。如果不需要些服務,可以在配置文件中將其註釋或刪除。
-
Configuration
這是HornetQ的Configuration對象。默認時它是一個FileConfiguration對象。它可以從文件系統中讀取 配置信息。有些情況下(如嵌入式HornetQ)你可以將它定義爲其它對象,以便用其它方法獲得配置信息。
-
Security Manager. 可配置的安全管理器。默認的安全管理器使用 hornetq-users.xml 文件中的配置信息。 它也可以配置爲一個JAAS的安全管理器。當HornetQ運行於JBoss應用服務器中時,它還可以配置爲JBoss的安全管理器,以達到更緊密的集成。 如果不需要安全管理,你也可以將它刪除。
-
HornetQServer
這是HornetQ的核心服務對象,幾乎所有的核心功能都在這裏。
-
這個對象將hornetq-jms.xml文件中定義的JMS的對象進行部署,比如JMS Queues, Topics 以及ConnectionFactory。它還提供一套簡單的管理接口以方便地對這些JMS對象進行管理。通常它只是將工作代理給 核心服務器。如果你不需要在服務器端進行JMS對象的部署與管理,可以將它從配置中去掉。
2)hornetq-configuration.xml
這個文件主要針對HornetQ做配置的。包括隊列大小,隊列滿時應採用的策略等等。
以下內容引用自HornetQ 2.1用戶手冊
名稱 | 類型 | 說明 | 默認值 |
---|---|---|---|
backup | Boolean | true表示本服務器是集羣中另一個服務器的備份服務器 | false |
backup-connector-ref | String | 用於連接備份服務器的連接器 | |
bindings-directory | String | 保存持久綁定的目錄the directory to store the persisted bindings to | data/bindings |
clustered | Boolean | true表示服務器是集羣中的節點 | false |
connection-ttl-override | Long | 表示在接收到一個ping之前連接保持有效的時間(單位毫秒) | -1 |
create-bindings-dir | Boolean | true表示服務器在啓動時創建綁定的目錄 | true |
create-journal-dir | Boolean | true表示創建日誌目錄 | true |
file-deployment-enabled | Boolean | true表示服務器從配置文件中讀取配置 | true |
id-cache-size | Integer | 預先生成的消息id的緩存大小 | 2000 |
journal-buffer-size | Long | 日誌內部緩存的大小 | 128 KiB |
journal-buffer-timeout | Long | T將日誌緩衝數據刷新的等待時間(納秒) | 20000 |
journal-compact-min-files | Integer | 開始整理數據的最小數據文件數。 | 10 |
journal-compact-percentage | Integer | 開始壓縮日誌時的有效數據百分比。 | 30 |
journal-directory | String | 日誌文件所在的位置 | data/journal |
journal-file-size | Long | 每個日誌文件的大小(字節) | 128 * 1024 |
journal-max-io | Integer | 某一時刻保存在AIO隊列中的最大寫請求數 | 500 |
journal-min-files | Integer | 預先創建的日誌文件數 | 2 |
journal-sync-transactional | Boolean | 如果是true,等事務數據同步到日誌後再向客戶端返回 | true |
journal-sync-non-transactional | Boolean | 如果是true,等非事務數據到日誌後再向客戶端返回 | true |
journal-type | ASYNCIO|NIO | 日誌存取的方式 | ASYNCIO |
jmx-management-enabled | Boolean | true表示通過JMX可以使用管理接口 | true |
jmx-domain | String | 用於HornetQ MBean註冊到MBeanServer的JMX域名 | org.hornetq |
large-messages-directory | String | 存放大消息的目錄 | data/largemessages |
management-address | String | 管理消息發送的地址 | jms.queue.hornetq.management |
cluster-user | String | 集羣連接的用戶名 | HORNETQ.CLUSTER.ADMIN.USER |
cluster-password | String | 集羣連接的用戶密碼 | CHANGE ME!! |
management-notification-address | String | 用於接收管理通知的地址 | hornetq.notifications |
message-counter-enabled | Boolean | true表示使用消息計數器 | false |
message-counter-max-day-history | Integer | 消息計數器歷史保存的天數 | 10 |
message-counter-sample-period | Long | 消息計數器取樣的間隔(毫秒) | 10000 |
message-expiry-scan-period | Long | 過期消息掃描週期(毫秒) | 30000 |
message-expiry-thread-priority | Integer | 過期消息線程的優先級 | 3 |
paging-directory | String | 分頁轉存消息的保存目錄 | data/paging |
persist-delivery-count-before-delivery | Boolean | true表示傳遞計數在傳遞之前保存。false表示只有當消息被取消時才保存。 | false |
persistence-enabled | Boolean | true表示服務器使用基於文件的日誌做持久化 | true |
persist-id-cache | Boolean | true表示id被保存到日誌中 | true |
scheduled-thread-pool-max-size | Integer | 可計劃線程池的線程數。 | 5 |
security-enabled | Boolean | true表示使用安全功能 | true |
security-invalidation-interval | Long | 安全緩存的有效時間(毫秒) | 10000 |
thread-pool-max-size | Integer | 主線程池的線程數。-1表示數量不限 | -1 |
async-connection-execution-enabled | Boolean | 接收的數據包是否由線程池的線程來處理 | true |
transaction-timeout | Long | 事務在建立後經過多長時間後可以從資源管理器(resource manager)刪除(毫秒) | 60000 |
transaction-timeout-scan-period | Long | 掃描超時事務的間隔(毫秒) | 1000 |
wild-card-routing-enabled | Boolean | true表示服務器支持通配符路由 | true |
memory-measure-interval | Long | 採樣JVM內存的週期(毫秒,-1表示不採樣) | -1 |
memory-warning-threshold | Integer | 可用內存達到這個百分比時,給出警告信息 | 25 |
connectors | Connector | 連接器的配置 | |
connector.name (attribute) | String | 連接器的名字-必需指定的參數 | |
connector.factory-class | String | 連接工廠的實現類名-必需指定的參數 | |
connector.param | 連接器的配置參數 | 一個鍵-值對,表示一個連接器的參數配置。一個連接器可以有多個這樣的參數 | |
connector.param.key (屬性) | String | 參數的鍵 - 必需指定的參數 | |
connector.param.value (attribute) | String | 參數的值 - 必需指定的參數 | |
acceptors | Acceptor | 一組接收器 | |
acceptor.name (屬性) | String | 接收器的名字 - 可選 | |
acceptor.factory-class | String | 接收器工廠實現類名 - 必需指定的參數 | |
acceptor.param | 一個接收器的配置參數 | 用來配置接收器的鍵-值對。一個接收器可以有多個參數。 | |
acceptor.param.key (屬性) | String | 參數的鍵 - 必需指定的參數 | |
acceptor.param.value (attribute) | String | 參數的值 - 必需指定的參數 | |
broadcast-groups | BroadcastGroup | 一組廣播組 | |
broadcast-group.name (attribute) | String | 廣播組的名字(必需是唯一的)- 必需指定的參數 | |
broadcast-group.local-bind-address | String | 數據報文套接字的本地綁定地址 | 內系統內核選擇的IP地址 |
broadcast-group.local-bind-port | Integer | 數據報文套接字的本地綁定端口 | -1 (匿名端口) |
broadcast-group.group-address | String | 廣播地址 - 必需指定的參數 | |
broadcast-group.group-port | Integer | 廣播使用的UDP端口 - 必需指定的參數 | |
broadcast-group.broadcast-period | Long | 廣播的時間間隔(毫秒) | 2000 |
broadcast-group.connector-ref | 一個連接器對 | 廣播的一個連接器和一個可選的備份連接器。一個廣播組可以有多個這樣的連接器對 | |
broadcast-group.connector-ref.connector-name (attribute) | String | 主連接器名 - 必需指定的參數 | |
broadcast-group.connector-ref.backup-connector-name (attribute) | String | 備份連接器名 - 可選的參數 | |
discovery-groups | DiscoveryGroup | 一組發現組 | |
discovery-group.name (屬性) | String | 發現組的名字(具有唯一性) - 必需指定的參數 | |
discovery-group.local-bind-address | String | 發現組所綁定的本地地址 | |
discovery-group.group-address | String | 發現組監聽的廣播IP地址 - 必需指定的參數 | |
discovery-group.group-port | Integer | 廣播組監聽的UDP端口 - 必需指定的參數 | |
discovery-group.refresh-timeout | Integer | 發現組等待更新的時間。如果某個服務器上次廣播到達後經過這個時間後還沒有收到下次廣播,那麼 該服務器的連接器對將從列表中刪除 | 5000 (毫秒) |
diverts | Divert | 一組轉發器 | |
divert.name (attribute) | String | 轉發器的名字(必需是唯一的) - 必需指定的參數 | |
divert.routing-name | String | 轉發器的路由名稱 - 必需指定的參數 | |
divert.address | String | 轉發器的源地址 - 必需指定的參數 | |
divert.forwarding-address | String | 轉發器的轉發地址 - 必需指定的參數 | |
divert.exclusive | Boolean | 轉發器是否是唯一的 | false |
divert.filter | String | 可選的核心過濾器表達式 | null |
divert.transformer-class-name | String | 可選的轉換器的名字 | |
queues | Queue | 一組預先配置的隊列 | |
queues.name (屬性) | String | 隊列獨特的名字 | |
queues.address | String | 隊列的地址 - 必需指定的參數 | |
queues.filter | String | 隊列可選的核心過濾器表達式 | null |
queues.durable | Boolean | 是否持久隊列 | true |
bridges | Bridge | 一組橋 | |
bridges.name (屬性) | String | 橋的獨特名字 | |
bridges.queue-name | String | 橋接收消息的源隊列名 - 必需指定的參數 | |
bridges.forwarding-address | String | 橋要轉發的地址。如果沒有指定則使用原始的地址 | null |
bridges.filter | String | 可選的核心過濾器表達式 | null |
bridges.transformer-class-name | String | 可選的轉換器類名 | null |
bridges.retry-interval | Long | 重試的時間間隔(毫秒) | 2000 ms |
bridges.retry-interval-multiplier | Double | 重試間隔的遞增係數 | 1.0 |
bridges.reconnect-attempts | Integer | 最大重試次數,-1代表無限次 | -1 |
bridges.failover-on-server-shutdown | Boolean | 如果目標服務器正常關機是否仍進行失效備援 | false |
bridges.use-duplicate-detection | Boolean | 是否在轉發的消息中添加重複檢測的頭 | true |
bridges.discovery-group-ref | String | 橋使用的發現組名 | null |
bridges.connector-ref.connector-name (屬性) | String | 主連接的連接器名 | |
bridges.connector-ref.backup-connector-name (屬性) | String | 備份連接的連接器名(可選) | null |
cluster-connections | ClusterConnection | 一組集羣連接 | |
cluster-connections.name (attribute) | String | 集羣連接的獨特名字 | |
cluster-connections.address | String | 集羣連接的地址名 | |
cluster-connections.forward-when-no-consumers | Boolean | 如果目標沒有合適的接收者,是否仍然向它分配消息? | false |
cluster-connections.max-hops | Integer | 集羣拓撲中的最大跳數(hops) | 1 |
cluster-connections.retry-interval | Long | 集羣連接重試的間隔(毫秒) | 2000 |
cluster-connections.use-duplicate-detection | Boolean | 是否在轉發的消息中添加重複檢測的消息頭 | true |
cluster-connections.discovery-group-ref | String | 橋所使用的發現組的名字 | null |
cluster-connections.connector-ref.connector-name (屬性) | String | 主連接的連接器名字 | |
cluster-connections.connector-ref.backup-connector-name (屬性) | String | 可選的備份連接所使用的連接器名字 | null |
security-settings | SecuritySetting | 一組安全設置 | |
security-settings.match (屬性) | String | 安全所應用的地址匹配字符串 | |
security-settings.permission | 安全許可 | 地址的一個許可 | |
security-settings.permission.type (attribute) | 許可類型 | 許可的類型 | |
security-settings.permission.roles (attribute) | Roles | 以逗號分隔的一組角色,這些角色將擁有相應的許可 | |
address-settings | AddressSetting | 一組地址設置 | |
address-settings.dead-letter-address | String | 死消息所發往的地址 | |
address-settings.max-delivery-attempts | Integer | 發往死信地址之前所嘗試的傳遞次數 | 10 |
address-settings.expiry-address | String | 過期消息所發往的地址 | |
address-settings.redelivery-delay | Long | 重新傳遞一個取消的消息前所等待的時間(毫秒) | 0 |
address-settings.last-value-queue | boolean | 隊列是否是一個最新值隊列 | false |
address-settings.page-size-bytes | Long | 一個地址的分頁的大小(字節) | 10 * 1024 * 1024 |
address-settings.max-size-bytes | Long | 地址的分頁轉存的最大值(字節) | -1 |
address-settings.redistribution-delay | Long | 隊列最後一個接收者關閉後需要等待多長時間再將消息重新分配(毫秒) | -1 |
3)hornetq-jms.xml
這個文件主要用來配置JMS服務的,內容包括JMS Queue, Topic和ConnectionFactory,這些配置會被部署到JNDI服務中。如果你不使用JMS,就不需要管這個文件了。
以下內容引用自HornetQ 2.1用戶手冊
4)hornetq-users.xml
這個文件主要配置HornetQ的用戶名、密碼和角色。
5)jndi.properties
這個是配置JNDI服務的
6)logging.properties
這是HornetQ自己獨立的日誌框架,不依賴其他框架