今天看下如何使用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自己独立的日志框架,不依赖其他框架