首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有Spring的JBoss AS7 JMS集群

带有Spring的JBoss AS7 JMS集群
EN

Stack Overflow用户
提问于 2013-07-30 13:42:27
回答 1查看 746关注 0票数 0

在JBoss 7 JMS集群上运行Spring时,我遇到了问题。

我通过这个文章建立了JMS集群--集群使用共享日志。我正在使用来自live1和backup1的示例配置。例如,使用包含消息驱动Bean的app在活动服务器和备份服务器之间切换是可行的。

我创建了一个简单的Spring应用程序来注册JMS侦听器。

我的jms-config.xml在这里:

代码语言:javascript
复制
<?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看起来是这样的:

代码语言:javascript
复制
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);
        }
    }

}

当我启动实时服务器时,消息由ExampleListener处理--没关系。当我启动备份服务器时,我得到了错误的javax.naming.NameNotFoundException,因为ConnectionFactory不是在JNDI下为备份服务器公开的--那么只有主服务器在工作,它不是集群。当服务器运行失败时,这里就没有备份了。

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

我也尝试过jms/RemoteConnectionFactory,但是在备份服务器上没有使用相同结果的JNDI名称下的资源。

下面是一个使用maven mvn package (Eclipse )构建它的webapp源代码。下面是一个简单的客户端源代码 (Eclipse )。

EN

回答 1

Stack Overflow用户

发布于 2013-07-30 20:09:10

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

HornetQ文档(实时备份组):单/#d0e11266

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17948742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档