原文: https://howtodoinjava.com/hornetq/spring-3-hornetq-standalone-integration-example/

    HornetQ 是一个开放源代码项目,旨在构建多协议,可嵌入,非常高性能的集群异步消息传递系统。 到目前为止,我们已经了解了配置 hornetq 独立服务器设置基本消息传递功能的示例。 HornetQ 具有很大的灵活性,可以通过一些现有的应用框架进行配置。 在此序列中,我将展示 HornetQ 在 Spring3 中的用法。

    让我们逐步进行所有设置。

    步骤 1)创建一个 Maven 项目并将其转换为 Eclipse Java 项目。

    步骤 2)使用 Spring3 和 hornetq 依赖项更新 maven 仓库。

    1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    3. <modelVersion>4.0.0</modelVersion>
    4. <groupId>com.howtodoinjava.app</groupId>
    5. <artifactId>Spring3HornetQStandaloneIntegration</artifactId>
    6. <packaging>jar</packaging>
    7. <version>1.0-SNAPSHOT</version>
    8. <name>Spring3HornetQStandaloneIntegration</name>
    9. <url>http://maven.apache.org</url>
    10. <properties>
    11. <org.springframework.version>3.0.5.RELEASE</org.springframework.version>
    12. </properties>
    13. <dependencies>
    14. <!-- User Application Lib -->
    15. <dependency>
    16. <groupId>commons-logging</groupId>
    17. <artifactId>commons-logging</artifactId>
    18. <version>1.1.1</version>
    19. </dependency>
    20. <dependency>
    21. <groupId>log4j</groupId>
    22. <artifactId>log4j</artifactId>
    23. <version>1.2.14</version>
    24. </dependency>
    25. <dependency>
    26. <groupId>junit</groupId>
    27. <artifactId>junit</artifactId>
    28. <version>4.7</version>
    29. <scope>test</scope>
    30. </dependency>
    31. <!-- HornetQ Embedded Server -->
    32. <dependency>
    33. <groupId>org.hornetq</groupId>
    34. <artifactId>hornetq-core</artifactId>
    35. <version>2.0.0.GA</version>
    36. <scope>compile</scope>
    37. </dependency>
    38. <dependency>
    39. <groupId>org.hornetq</groupId>
    40. <artifactId>hornetq-jms</artifactId>
    41. <version>2.0.0.GA</version>
    42. <scope>compile</scope>
    43. </dependency>
    44. <dependency>
    45. <groupId>org.hornetq</groupId>
    46. <artifactId>hornetq-logging</artifactId>
    47. <version>2.0.0.GA</version>
    48. <scope>compile</scope>
    49. </dependency>
    50. <dependency>
    51. <groupId>org.hornetq</groupId>
    52. <artifactId>hornetq-transports</artifactId>
    53. <version>2.0.0.GA</version>
    54. <scope>compile</scope>
    55. </dependency>
    56. <dependency>
    57. <groupId>org.jboss.netty</groupId>
    58. <artifactId>netty</artifactId>
    59. <version>3.1.0.GA</version>
    60. </dependency>
    61. <dependency>
    62. <groupId>org.jboss.javaee</groupId>
    63. <artifactId>jboss-jms-api</artifactId>
    64. <version>1.1.0.GA</version>
    65. <scope>compile</scope>
    66. </dependency>
    67. <dependency>
    68. <groupId>org.jboss</groupId>
    69. <artifactId>jboss-common-core</artifactId>
    70. <version>2.2.10.GA</version>
    71. </dependency>
    72. <dependency>
    73. <groupId>org.jboss.logging</groupId>
    74. <artifactId>jboss-logging-spi</artifactId>
    75. <version>2.0.5.GA</version>
    76. </dependency>
    77. <!--
    78. Core utilities used by other modules.
    79. Define this if you use Spring Utility APIs (org.springframework.core.*/org.springframework.util.*)
    80. -->
    81. <dependency>
    82. <groupId>org.springframework</groupId>
    83. <artifactId>spring-core</artifactId>
    84. <version>${org.springframework.version}</version>
    85. </dependency>
    86. <!--
    87. Expression Language (depends on spring-core)
    88. Define this if you use Spring Expression APIs (org.springframework.expression.*)
    89. -->
    90. <dependency>
    91. <groupId>org.springframework</groupId>
    92. <artifactId>spring-expression</artifactId>
    93. <version>${org.springframework.version}</version>
    94. </dependency>
    95. <!--
    96. Bean Factory and JavaBeans utilities (depends on spring-core)
    97. Define this if you use Spring Bean APIs (org.springframework.beans.*)
    98. -->
    99. <dependency>
    100. <groupId>org.springframework</groupId>
    101. <artifactId>spring-beans</artifactId>
    102. <version>${org.springframework.version}</version>
    103. </dependency>
    104. <!--
    105. Aspect Oriented Programming (AOP) Framework (depends on spring-core, spring-beans)
    106. Define this if you use Spring AOP APIs (org.springframework.aop.*)
    107. -->
    108. <dependency>
    109. <groupId>org.springframework</groupId>
    110. <artifactId>spring-aop</artifactId>
    111. <version>${org.springframework.version}</version>
    112. </dependency>
    113. <!--
    114. Application Context (depends on spring-core, spring-expression, spring-aop, spring-beans)
    115. This is the central artifact for Spring's Dependency Injection Container and is generally always defined
    116. -->
    117. <dependency>
    118. <groupId>org.springframework</groupId>
    119. <artifactId>spring-context</artifactId>
    120. <version>${org.springframework.version}</version>
    121. </dependency>
    122. <!--
    123. Various Application Context utilities, including EhCache, JavaMail, Quartz, and Freemarker integration
    124. Define this if you need any of these integrations
    125. -->
    126. <dependency>
    127. <groupId>org.springframework</groupId>
    128. <artifactId>spring-context-support</artifactId>
    129. <version>${org.springframework.version}</version>
    130. </dependency>
    131. <!--
    132. Transaction Management Abstraction (depends on spring-core, spring-beans, spring-aop, spring-context)
    133. Define this if you use Spring Transactions or DAO Exception Hierarchy
    134. (org.springframework.transaction.*/org.springframework.dao.*)
    135. -->
    136. <dependency>
    137. <groupId>org.springframework</groupId>
    138. <artifactId>spring-tx</artifactId>
    139. <version>${org.springframework.version}</version>
    140. </dependency>
    141. <!--
    142. JDBC Data Access Library (depends on spring-core, spring-beans, spring-context, spring-tx)
    143. Define this if you use Spring's JdbcTemplate API (org.springframework.jdbc.*)
    144. -->
    145. <dependency>
    146. <groupId>org.springframework</groupId>
    147. <artifactId>spring-jdbc</artifactId>
    148. <version>${org.springframework.version}</version>
    149. </dependency>
    150. <!--
    151. Object-to-Relation-Mapping (ORM) integration with Hibernate, JPA, and iBatis.
    152. (depends on spring-core, spring-beans, spring-context, spring-tx)
    153. Define this if you need ORM (org.springframework.orm.*)
    154. -->
    155. <dependency>
    156. <groupId>org.springframework</groupId>
    157. <artifactId>spring-orm</artifactId>
    158. <version>${org.springframework.version}</version>
    159. </dependency>
    160. <!--
    161. Object-to-XML Mapping (OXM) abstraction and integration with JAXB, JiBX, Castor, XStream, and XML Beans.
    162. (depends on spring-core, spring-beans, spring-context)
    163. Define this if you need OXM (org.springframework.oxm.*)
    164. -->
    165. <dependency>
    166. <groupId>org.springframework</groupId>
    167. <artifactId>spring-oxm</artifactId>
    168. <version>${org.springframework.version}</version>
    169. </dependency>
    170. <!--
    171. Web application development utilities applicable to both Servlet and Portlet Environments
    172. (depends on spring-core, spring-beans, spring-context)
    173. Define this if you use Spring MVC, or wish to use Struts, JSF, or another web framework with Spring (org.springframework.web.*)
    174. -->
    175. <dependency>
    176. <groupId>org.springframework</groupId>
    177. <artifactId>spring-web</artifactId>
    178. <version>${org.springframework.version}</version>
    179. </dependency>
    180. <!--
    181. Spring MVC for Servlet Environments (depends on spring-core, spring-beans, spring-context, spring-web)
    182. Define this if you use Spring MVC with a Servlet Container such as Apache Tomcat (org.springframework.web.servlet.*)
    183. -->
    184. <dependency>
    185. <groupId>org.springframework</groupId>
    186. <artifactId>spring-webmvc</artifactId>
    187. <version>${org.springframework.version}</version>
    188. </dependency>
    189. <!--
    190. Spring MVC for Portlet Environments (depends on spring-core, spring-beans, spring-context, spring-web)
    191. Define this if you use Spring MVC with a Portlet Container (org.springframework.web.portlet.*)
    192. -->
    193. <dependency>
    194. <groupId>org.springframework</groupId>
    195. <artifactId>spring-webmvc-portlet</artifactId>
    196. <version>${org.springframework.version}</version>
    197. </dependency>
    198. <!--
    199. Support for testing Spring applications with tools such as JUnit and TestNG
    200. This artifact is generally always defined with a 'test' scope for the integration testing framework and unit testing stubs
    201. -->
    202. <dependency>
    203. <groupId>org.springframework</groupId>
    204. <artifactId>spring-test</artifactId>
    205. <version>${org.springframework.version}</version>
    206. <scope>test</scope>
    207. </dependency>
    208. </dependencies>
    209. </project>

    步骤 3)在lib文件夹中添加两个其他 jar。 如果时间允许,请找到它们的 Maven 依赖项并添加pom.xml

    • jnpserver-5.0.3.GA.jar
    • org.springframework.jms-3.0.5.RELEASE.jar

    步骤 4)从 jboss 发行版复制以下文件,并将其放在类路径中。 或者,只需复制下面给出的文件。

    hornetq-configuration.xml

    1. <configuration xmlns="urn:hornetq"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="urn:hornetq /schema/hornetq-configuration.xsd">
    4. <connectors>
    5. <connector name="netty">
    6. <factory-class>org.hornetq.integration.transports.netty.NettyConnectorFactory</factory-class>
    7. <param key="host" value="${hornetq.remoting.netty.host:localhost}"/>
    8. <param key="port" value="${hornetq.remoting.netty.port:5445}"/>
    9. </connector>
    10. </connectors>
    11. <acceptors>
    12. <acceptor name="netty">
    13. <factory-class>org.hornetq.integration.transports.netty.NettyAcceptorFactory</factory-class>
    14. <param key="host" value="${hornetq.remoting.netty.host:localhost}"/>
    15. <param key="port" value="${hornetq.remoting.netty.port:5445}"/>
    16. </acceptor>
    17. </acceptors>
    18. <security-settings>
    19. <security-setting match="#">
    20. <permission type="createTempQueue" roles="guest"/>
    21. <permission type="deleteTempQueue" roles="guest"/>
    22. <permission type="consume" roles="guest"/>
    23. <permission type="send" roles="guest"/>
    24. </security-setting>
    25. </security-settings>
    26. <address-settings>
    27. <!--default for catch all-->
    28. <address-setting match="#">
    29. <dead-letter-address>jms.queue.DLQ</dead-letter-address>
    30. <expiry-address>jms.queue.ExpiryQueue</expiry-address>
    31. <redelivery-delay>0</redelivery-delay>
    32. <max-size-bytes>-1</max-size-bytes>
    33. <page-size-bytes>10485760</page-size-bytes>
    34. <message-counter-history-day-limit>10</message-counter-history-day-limit>
    35. </address-setting>
    36. </address-settings>
    37. <paging-directory>${hornetq.data.dir}/paging</paging-directory>
    38. <bindings-directory>${hornetq.data.dir}/bindings</bindings-directory>
    39. <journal-directory>${hornetq.data.dir}/journal</journal-directory>
    40. <large-messages-directory>${hornetq.data.dir}/large-messages</large-messages-directory>
    41. </configuration>

    hornetq-jms.xml

    1. <configuration xmlns="urn:hornetq"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="urn:hornetq /schema/hornetq-jms.xsd">
    4. <connection-factory name="NettyConnectionFactory">
    5. <connectors>
    6. <connector-ref connector-name="netty"/>
    7. </connectors>
    8. <entries>
    9. <entry name="/ConnectionFactory"/>
    10. <entry name="/XAConnectionFactory"/>
    11. </entries>
    12. </connection-factory>
    13. <queue name="ExampleQueue">
    14. <entry name="/queue/ExampleQueue"/>
    15. </queue>
    16. <topic name="ExampleTopic">
    17. <entry name="/topic/ExampleTopic"/>
    18. </topic>
    19. </configuration>

    hornetq-users.xml

    1. <configuration xmlns="urn:hornetq" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    2. xsi:schemaLocation="urn:hornetq /schema/hornetq-users.xsd">
    3. <!-- the default user. this is used where username is null-->
    4. <defaultuser name="guest" password="guest">
    5. <role name="guest"/>
    6. </defaultuser>
    7. </configuration>

    步骤 5)在类路径中复制jndi.properties

    1. java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
    2. java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces

    步骤 6)配置记录器,以更好地捕获信息。

    1. # Create a STDOUT appender
    2. log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
    3. log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
    4. log4j.appender.STDOUT.layout.ConversionPattern=%05p | %m%n
    5. # Default everything to WARN
    6. log4j.rootCategory=WARN, STDOUT
    7. # Enable this application log level to the lowest.
    8. log4j.category.com.howtodoinjava=TRACE
    9. log4j.category.org.jnp.server=INFO
    10. log4j.category.org.hornetq=INFO
    11. log4j.category.org.springframework=INFO

    步骤 7)到目前为止,已经配置了 hornetq 服务器和 jndi。 现在,将它们插入spring.xmlspring.properties中的 spring 框架。

    spring.xml

    1. <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    5. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    6. <context:annotation-config />
    7. <context:property-placeholder location="classpath:config/server/spring.properties" />
    8. <bean name ="namingServerImpl" class="org.jnp.server.NamingBeanImpl" init-method="start" destroy-method="stop">
    9. </bean>
    10. <!-- JNDI server. Disable this if you don't want JNDI -->
    11. <bean name="namingServer" class="org.jnp.server.Main" init-method="start" destroy-method="stop">
    12. <property name="namingInfo" ref="namingServerImpl"></property>
    13. <property name="port" value="1099"></property>
    14. <property name="bindAddress" value="localhost"></property>
    15. <property name="rmiPort" value="1098"></property>
    16. <property name="rmiBindAddress" value="localhost"></property>
    17. </bean>
    18. <!-- MBean server -->
    19. <bean name="mbeanServer" class="java.lang.management.ManagementFactory" factory-method="getPlatformMBeanServer">
    20. </bean>
    21. <!-- The core configuration -->
    22. <bean name="fileConfiguration" class="org.hornetq.core.config.impl.FileConfiguration" init-method="start" destroy-method="stop">
    23. </bean>
    24. <!-- The security manager -->
    25. <bean name="hornetQSecurityManagerImpl" class="org.hornetq.spi.core.security.HornetQSecurityManagerImpl">
    26. </bean>
    27. <!-- The core server -->
    28. <bean name="hornetQServerImpl" class="org.hornetq.core.server.impl.HornetQServerImpl">
    29. <constructor-arg ref="fileConfiguration" />
    30. <constructor-arg ref="mbeanServer" />
    31. <constructor-arg ref="hornetQSecurityManagerImpl" />
    32. </bean>
    33. <!-- The JMS server -->
    34. <bean name="jmsServerManagerImpl" class="org.hornetq.jms.server.impl.JMSServerManagerImpl" init-method="start" destroy-method="stop">
    35. <constructor-arg ref="hornetQServerImpl" />
    36. </bean>
    37. <bean name="connectionFactory" class="org.hornetq.jms.client.HornetQConnectionFactory" >
    38. <constructor-arg>
    39. <bean class="org.hornetq.api.core.TransportConfiguration">
    40. <constructor-arg value="org.hornetq.integration.transports.netty.NettyConnectorFactory" />
    41. <constructor-arg>
    42. <map key-type="java.lang.String" value-type="java.lang.Object">
    43. <entry key="port" value="5445"></entry>
    44. </map>
    45. </constructor-arg>
    46. </bean>
    47. </constructor-arg>
    48. </bean>
    49. <bean name="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    50. <property name="connectionFactory" ref="connectionFactory"></property>
    51. </bean>
    52. <bean name="messageProducerClient" class="com.howtodoinjava.hornetq.demo.MessageProducerClient">
    53. <property name="jmsTemplate" ref="jmsTemplate"></property>
    54. </bean>
    55. <bean name="messageConsumerClient" class="com.howtodoinjava.hornetq.demo.MessageConsumerClient">
    56. <property name="jmsTemplate" ref="jmsTemplate"></property>
    57. </bean>
    58. </beans>

    spring.properties

    1. hornetq.data.dir=${hornetq.spring.examples.home}/hornetq-data
    2. org.hornetq.logger-delegate-factory-class-name=org.hornetq.integration.logging.Log4jLogDelegateFactory

    步骤 8)首先加载 Spring 容器。 它还将验证我们所有的配置文件。

    SpringContainerLoader.java

    1. package com.howtodoinjava.hornetq.demo;
    2. import org.springframework.context.support.FileSystemXmlApplicationContext;
    3. public class SpringContainerLoader
    4. {
    5. public static FileSystemXmlApplicationContext loadEnvironment()
    6. {
    7. final FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext("classpath:config/server/spring.xml");
    8. context.registerShutdownHook();
    9. context.start();
    10. return context;
    11. }
    12. }

    步骤 8)现在,我将编写消息生产者和消息使用者客户端。

    MessageProducerClient.java

    1. package com.howtodoinjava.hornetq.demo;
    2. import javax.jms.JMSException;
    3. import javax.jms.MessageProducer;
    4. import javax.jms.Session;
    5. import javax.jms.TextMessage;
    6. import org.apache.commons.logging.Log;
    7. import org.apache.commons.logging.LogFactory;
    8. import org.springframework.jms.core.JmsTemplate;
    9. import org.springframework.jms.core.ProducerCallback;
    10. public class MessageProducerClient implements Runnable {
    11. private static Log log = LogFactory.getLog(MessageProducerClient.class);
    12. private static int counter = 1;
    13. private JmsTemplate jmsTemplate;
    14. public void setJmsTemplate(JmsTemplate jmsTemplate) {
    15. this.jmsTemplate = jmsTemplate;
    16. }
    17. @Override
    18. public void run() {
    19. jmsTemplate.execute("ExampleQueue", new ProducerCallback<Object>() {
    20. @Override
    21. public Object doInJms(Session session, MessageProducer producer)
    22. throws JMSException {
    23. while (true) {
    24. TextMessage msg = session.createTextMessage("Message number : " + counter++);
    25. log.trace("Sending msg: " + msg);
    26. producer.send(msg);
    27. try {
    28. Thread.sleep(2000);
    29. } catch (InterruptedException e) {
    30. e.printStackTrace();
    31. }
    32. }
    33. }
    34. });
    35. }
    36. }

    MessageConsumerClient.java

    1. package com.howtodoinjava.hornetq.demo;
    2. import javax.jms.JMSException;
    3. import javax.jms.Message;
    4. import javax.jms.MessageConsumer;
    5. import javax.jms.Queue;
    6. import javax.jms.Session;
    7. import org.apache.commons.logging.Log;
    8. import org.apache.commons.logging.LogFactory;
    9. import org.springframework.jms.core.JmsTemplate;
    10. import org.springframework.jms.core.SessionCallback;
    11. public class MessageConsumerClient implements Runnable {
    12. private static Log log = LogFactory.getLog(MessageConsumerClient.class);
    13. private JmsTemplate jmsTemplate;
    14. public void setJmsTemplate(JmsTemplate jmsTemplate) {
    15. this.jmsTemplate = jmsTemplate;
    16. }
    17. @Override
    18. public void run()
    19. {
    20. log.info("Message Consumer is just started !!");
    21. boolean startConn = true;
    22. jmsTemplate.execute(new SessionCallback<Object>() {
    23. @Override
    24. public Object doInJms(Session session) throws JMSException {
    25. Queue queue = session.createQueue("ExampleQueue");
    26. MessageConsumer consumer = session.createConsumer(queue);
    27. while (true) {
    28. Message msg = consumer.receive();
    29. log.trace("Received msg: " + msg);
    30. }
    31. }
    32. }, startConn);
    33. }
    34. }

    步骤 9)现在该测试整个代码和消息传递功能了。

    HornetQMessagingTest.java

    1. package com.howtodoinjava.hornetq.demo;
    2. import org.springframework.context.ApplicationContext;
    3. public class HornetQMessagingTest
    4. {
    5. public static void main(String[] args) throws InterruptedException
    6. {
    7. //Load configurations
    8. ApplicationContext context = SpringContainerLoader.loadEnvironment();
    9. //Start the message producer
    10. new Thread((Runnable)context.getBean("messageProducerClient")).start();
    11. //Start the message consumer
    12. new Thread((Runnable)context.getBean("messageConsumerClient")).start();
    13. }
    14. }

    在测试类之上运行会在下面生成日志,以验证 Spring3 和 hornetq 集成成功。

    1. INFO | Refreshing org.springframework.context.support.FileSystemXmlApplicationContext@aa9835: startup date [Mon Mar 25 09:23:26 IST 2013]; root of context hierarchy
    2. INFO | Loading XML bean definitions from class path resource [config/server/spring.xml]
    3. INFO | Loading properties file from class path resource [config/server/spring.properties]
    4. INFO | Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1b4fad5: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#0,namingServerImpl,namingServer,mbeanServer,fileConfiguration,hornetQSecurityManagerImpl,hornetQServerImpl,jmsServerManagerImpl,connectionFactory,jmsTemplate,messageProducerClient,messageConsumerClient]; root of factory hierarchy
    5. 25 Mar, 2013 9:23:28 AM org.hornetq.core.logging.impl.JULLogDelegate info
    6. INFO: live server is starting..
    7. 25 Mar, 2013 9:23:28 AM org.hornetq.core.logging.impl.JULLogDelegate warn
    8. WARNING: AIO wasn't located on this platform, it will fall back to using pure Java NIO. If your platform is Linux, install LibAIO to enable the AIO journal
    9. 25 Mar, 2013 9:23:28 AM org.hornetq.core.logging.impl.JULLogDelegate info
    10. INFO: Using NIO Journal
    11. 25 Mar, 2013 9:23:28 AM org.hornetq.core.logging.impl.JULLogDelegate warn
    12. WARNING: Security risk! It has been detected that the cluster admin user and password have not been changed from the installation default. Please see the HornetQ user guide, cluster chapter, for instructions on how to do this.
    13. 25 Mar, 2013 9:23:30 AM org.hornetq.core.logging.impl.JULLogDelegate info
    14. INFO: Started Netty Acceptor version 3.1.5.GA-r1772
    15. 25 Mar, 2013 9:23:30 AM org.hornetq.core.logging.impl.JULLogDelegate info
    16. INFO: HornetQ Server version 2.0.0.GA (Hornet Queen, 113) started
    17. INFO | Message Consumer is just started !!
    18. TRACE | Sending msg: HornetQMessage[null]:PERSISTENT
    19. TRACE | Received msg: HornetQMessage[ID:8e74da0e-94ff-11e2-bbba-002564ac1704:0000000000000000]:PERSISTENT
    20. TRACE | Sending msg: HornetQMessage[null]:PERSISTENT
    21. TRACE | Received msg: HornetQMessage[ID:8e74da0e-94ff-11e2-bbba-002564ac1704:1000000000000000]:PERSISTENT
    22. TRACE | Sending msg: HornetQMessage[null]:PERSISTENT
    23. TRACE | Received msg: HornetQMessage[ID:8e74da0e-94ff-11e2-bbba-002564ac1704:2000000000000000]:PERSISTENT
    24. TRACE | Sending msg: HornetQMessage[null]:PERSISTENT
    25. TRACE | Received msg: HornetQMessage[ID:8e74da0e-94ff-11e2-bbba-002564ac1704:3000000000000000]:PERSISTENT

    如有任何问题,请先确认以下几点:

    • 所有配置文件都在类路径中。
    • lib 文件夹中存在的两个 jar 文件包含在类路径中。

    作为参考,我给出了目录结构的快照。

    Spring3 Hornetq 独立集成示例 - 图1

    源代码下载

    祝您学习愉快!