当前位置: 首页 > 知识库问答 >
问题:

带有Spring应用程序的JBoss AS7 JMS集群

印劲
2023-03-14

我在JBoss7 JMS集群上运行Spring webapp时遇到了一个问题。

<?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>

exampleListener.java如下所示:

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);
        }
    }

}

当我启动live服务器时,消息由ExampleListener处理--这是可以的。当我启动备份服务器时,我得到了错误javax.naming.NameNotFoundException beacauseConnectionFactory在JNDI下没有公开--这时只有主服务器在工作,它不是集群。当live server失败时,这里没有备份。

当我尝试为ConnectionFactory和testQueue设置lazy-init=“true”loadonstartup=“false”(+代理接口)时,没有什么变化,因为listenerContainer将在备份服务器启动时创建它。我需要listenerContainer将等待,直到备份服务器成为活的,然后将连接到队列。

下面是一个webapp源代码,使用mavenMVN包(Eclipse project)构建它。下面是一个简单的JMS客户机源代码(Eclipse项目)。

共有1个答案

王渊
2023-03-14

注意,备份服务器是一个被动的HornetQ消息传递服务器,在故障转移之前不能有任何生产者或消费者。

HornetQ文档(实时备份组):http://Docs.jboss.org/HornetQ/2.3.0.final/Docs/user-manual/html_single/#d0e11266

 类似资料: