当前位置: 首页 > 工具软件 > HornetQ > 使用案例 >

HornetQ的初始化

汪凌
2023-12-01
HornetQ是Jboss旗下的一个高性能、异步的并且支持多种协议的消息系统。具体的简介请参照 HornetQ官网。

本文只是针对HornetQ在Jboss中的启动和加载过程做一个简介,并没有做代码级别的深入解释。涉及的软件版本:服务器版本: jboss-eap-5.1GA,HornetQ版本:hornetq-2.1.2.Final。

按照HornetQ用户指南在Jboss中安装了HornetQ后,会在JBOSS_HOME/server/下生成default-with- hornetq和all-with-hornetq两个服务器配置。其实可以将HornetQ在boss上的安装看做是HornetQ更换了jboss默认的jms实现并将jboss-messaging替换成了HornetQ。我们以default-with-HornetQ配置为例,发现会在该配置的 deploy目录下生成hornetq.sar与hornetq-ra.rar文件夹。hornetq-ra.rar主要是关于资源适配器的设置,不做本文的重点。hornetq.sar配置的是hornetq服务的相关信息。其目录结构如下:

[img]http://dl.iteye.com/upload/attachment/353732/5459318c-4978-3ee1-8ea3-01abfa8c9900.jpg[/img]

* hornetq-jboss-beans.xml 主要配置了HornetQ服务初始化所依赖的pojobean的相关信息,这个文件中的bean会被Jboss加载,完成Hornetq配置文件的解析,hornetq组件的启动,jms相关的jndi以及客户端的配置等。hornetq-configuration.xml HornetQ的主要配置文件。
* hornetq-jms.xml jms的配置
* login-config.xml 登陆配置
* hornetq-roles.properties 角色配置
* hornetq-users.properties 用户配置

hornetq-jboss-beans.xml的内容如下:


<?xml version="1.0" encoding="UTF-8"?>

<deployment xmlns="urn:jboss:bean-deployer:2.0">

<!-- 配置JMX服务器->
<bean name="MBeanServer" class="javax.management.MBeanServer">
<constructor factoryClass="org.jboss.mx.util.MBeanServerLocator"
factoryMethod="locateJBoss"/>
</bean>

<!-- HornetQ的核心配置 -->
<bean name="Configuration" class="org.hornetq.core.config.impl.FileConfiguration"/>

<!-- 安全管理器的配置 -->
<bean name="HornetQSecurityManager" class="org.hornetq.integration.jboss.security.JBossASSecurityManager">
<depends>JBossSecurityJNDIContextEstablishment</depends>
<!--表示加载时不启动-->
<start ignored="true"/>
<stop ignored="true"/>
<property name="allowClientLogin">false</property>
<property name="authoriseOnClientLogin">false</property>
</bean>

<!--Hornetq的核心服务器 -->
<bean name="HornetQServer" class="org.hornetq.core.server.impl.HornetQServerImpl">
<!--表示bean之间的依赖关系-->
<constructor>
<parameter>
<inject bean="Configuration"/>
</parameter>
<parameter>
<inject bean="MBeanServer"/>
</parameter>
<parameter>
<inject bean="HornetQSecurityManager"/>
</parameter>
</constructor>
<!--表示加载时不启动-->
<start ignored="true"/>
<stop ignored="true"/>
</bean>

<!-- JMS 服务器 -->
<bean name="JMSServerManager" class="org.hornetq.jms.server.impl.JMSServerManagerImpl">
<constructor>
<parameter>
<inject bean="HornetQServer"/>
</parameter>
</constructor>
</bean>

<!-- POJO which ensures HornetQ Resource Adapter is stopped before HornetQServer -->
<!-- -->
<!-- update the RA object name if you rename hornetq-ra.rar to jms-ra.rar -->
<bean name="HornetQRAService" class="org.hornetq.ra.HornetQRAService">
<constructor>
<parameter>
<inject bean="MBeanServer"/>
</parameter>
<parameter>jboss.jca:name='hornetq-ra.rar',service=RARDeployment</parameter>
</constructor>
<depends>HornetQServer</depends>
</bean>

</deployment>





由上面的配置可以看出,Hornetq最终启动是由 org.hornetq.jms.server.impl.JMSServerManagerImpl类触发,该类初始化的过程中会触发HornetQ的核心服务器的初始化,使HornetQ的各个组件都处于运行的状态,例如Acceptor监听各自的端口和服务。


[img]http://dl.iteye.com/upload/attachment/353736/05fc5c72-96d8-3a29-aac5-ad0558742430.jpg[/img]

由上图可以看出JMSServerManagerImpl负责调用HornetQ Server的初始化工作,hornetQ会根据自己是不是主备来决定要不要是JMS的相关队列和工厂对外提供服务。
那么备机什么时候会初始化JMS server呢?答案是在主机宕机的情况下,当客户端连接到备机的时候才会调用JMSServerManagerImpl的actived(),而是备机激活JMS服务。
 类似资料: