JBoss AS7 JMS集群与Spring应用程序

JBoss AS7 JMS集群与Spring应用程序,spring,jboss7.x,cluster-computing,hornetq,spring-jms,Spring,Jboss7.x,Cluster Computing,Hornetq,Spring Jms,我在JBoss7JMS集群上运行SpringWebApp时遇到问题 我通过这个设置JMS集群-集群使用共享日志。我使用的是来自的live1和backup1配置。例如,使用包含消息驱动Bean的应用程序在实时服务器和备份服务器之间切换是可行的 我创建了注册JMS侦听器的简单SpringWeb应用程序 我的jms-config.xml如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springf

我在JBoss7JMS集群上运行SpringWebApp时遇到问题

我通过这个设置JMS集群-集群使用共享日志。我使用的是来自的live1和backup1配置。例如,使用包含消息驱动Bean的应用程序在实时服务器和备份服务器之间切换是可行的

我创建了注册JMS侦听器的简单SpringWeb应用程序

我的jms-config.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <bean id="ConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="ConnectionFactory" />
    </bean>

    <bean id="testQueue" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="jms/queue/test" />
    </bean>

    <bean id="listener" class="eu.cuptech.jms.ExampleListener" />

    <bean id="listenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="ConnectionFactory" />
        <property name="destination" ref="testQueue" />
        <property name="messageListener" ref="listener" />
    </bean>

</beans>
当我启动live server时,消息由ExampleListener处理—这是正常的。当我启动备份服务器时,我收到了错误javax.naming.NameNotFoundException因为备份服务器的JNDI下没有显示连接工厂,所以只有主服务器在工作,它不是群集。当live server出现故障时,现在没有备份

当我尝试为ConnectionFactory和testQueue设置
lazy init=“true”
loadOnStartup=“false”
(+代理接口)时,没有任何更改,因为listenerContainer将在备份服务器启动时创建它。我需要listenerContainer将等待备份服务器启动,然后连接到队列

我也尝试了
jms/RemoteConnectionFactory
,但结果相同——备份服务器上没有JNDI名称下的资源

下面是一个使用maven
mvn包构建的it(Eclipse项目)。

这里是一个简单的JMS(Eclipse项目)。

请注意,备份服务器是一个被动HornetQ消息服务器,在故障切换之前不能有任何生产者或消费者


HornetQ Docs(实时备份组):

它在故障转移之前没有任何文档,因为应用程序永远不会在服务器上启动。即使在实时服务器出现故障后,备份也应该是实时的。
package eu.cuptech.jms;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

public class ExampleListener implements MessageListener {

    public void onMessage(Message message) {
        try {
            String msg = ((TextMessage) message).getText();
            System.out.println("MESSAGE TEXT: " + msg);
        } catch (JMSException e) {
            throw new RuntimeException(e);
        }
    }

}