如果你更换它应该可以工作
<bean name="hornetConnectionFactory" class="org.hornetq.jms.client.HornetQJMSConnectionFactory">
<constructor-arg name="ha" value="false"></constructor-arg>
<constructor-arg>
<bean name="transportConfiguration" class="org.hornetq.api.core.TransportConfiguration">
<constructor-arg
value="org.hornetq.core.remoting.impl.netty.NettyConnectorFactory" />
<constructor-arg>
<map key-type="java.lang.String" value-type="java.lang.Object">
<entry key="host" value="127.0.0.1" />
<entry key="port" value="5445" />
</map>
</constructor-arg>
</bean>
</constructor-arg>
</bean>
<!-- ConnectionFactory Definition -->
<bean id="connectionFactory"
class="org.springframework.jms.connection.CachingConnectionFactory">
<constructor-arg ref="hornetConnectionFactory"/>
</bean>
<!-- Definition of the JMS queue -->
<bean id="defaultDestination" class="org.hornetq.jms.client.HornetQQueue">
<constructor-arg index="0" value="DemoQueue"></constructor-arg>
</bean>
with
<jee:jndi-lookup id="connectionFactory" jndi-name="java:/JmsXA"/>
<jee:jndi-lookup id="defaultDestination" jndi-name="java:/queue/DemoQueue"/>
这样做时,您的 pom 中也不应该需要 hornetq 依赖项,因为使用 JNDI 查找来执行此操作与实现无关(这是一件好事)。您所参考的说明是关于连接到独立的hornetq 服务器,在这种情况下您将需要实现。但是,连接到嵌入式不需要它们。
当然,假设您的 Spring 应用程序部署在具有嵌入式 HornetQ 的 JBoss 中。
更新:好的,所以您补充说您实际上是从 Tomcat 连接到 JBoss 实例。在这种情况下,我只看到两件事是错误的:
<hornetq.version>2.2.18.Final</hornetq.version>
这是错误的,因为它与 JBoss 7.1.1 附带的版本不匹配,并解释了您的拓扑错误。它应该是:
<hornetq.version>2.2.13.Final</hornetq.version>
此外,修复此问题后,您会收到安全错误,因为您尚未禁用安全性,但也未向 JMS 连接提供任何用户凭据。尝试将其添加到您的 JBoss HornetQ 配置中:
<subsystem xmlns="urn:jboss:domain:messaging:1.1">
<hornetq-server>
<security-enabled>false</security-enabled> <!-- <- this part -->
如果您不想使用安全性,请禁用它。
我也测试了这个this https://github.com/eis/jboss-mq-integration-example包含 github 中的示例代码。
Update2:为了能够使用 JMS 安全性,请替换此
<!-- ConnectionFactory Definition -->
<bean id="connectionFactory"
class="org.springframework.jms.connection.CachingConnectionFactory">
<constructor-arg ref="hornetConnectionFactory"/>
</bean>
有了这个
<!-- ConnectionFactory Definitions -->
<bean id="userCredsConnectionFactory" class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
<property name="targetConnectionFactory"><ref bean="hornetConnectionFactory"/></property>
<property name="username"><value>jmsuser</value></property>
<property name="password"><value>hornetq</value></property>
<!-- use credentials of some user you have added in 'jmsrole' group as application
user in jboss in the above config -->
</bean>
<bean id="connectionFactory"
class="org.springframework.jms.connection.CachingConnectionFactory">
<constructor-arg ref="userCredsConnectionFactory"/>
</bean>