在JBoss 7 JMS集群上运行Spring时,我遇到了问题。
我通过这个文章建立了JMS集群--集群使用共享日志。我正在使用来自live1和backup1的示例配置。例如,使用包含消息驱动Bean的app在活动服务器和备份服务器之间切换是可行的。
我创建了一个简单的Spring应用程序来注册JMS侦听器。
我的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>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);
}
}
}当我启动实时服务器时,消息由ExampleListener处理--没关系。当我启动备份服务器时,我得到了错误的javax.naming.NameNotFoundException,因为ConnectionFactory不是在JNDI下为备份服务器公开的--那么只有主服务器在工作,它不是集群。当服务器运行失败时,这里就没有备份了。
当我尝试将lazy-init="true"和loadOnStartup="false" (+代理接口)设置为ConnectionFactory和testQueue时,没有什么改变,因为listenerContainer会在启动备份服务器时创建它。我需要listenerContainer将等待备份服务器启用,然后将连接到队列。
我也尝试过jms/RemoteConnectionFactory,但是在备份服务器上没有使用相同结果的JNDI名称下的资源。
下面是一个使用maven mvn package (Eclipse )构建它的webapp源代码。下面是一个简单的客户端源代码 (Eclipse )。
发布于 2013-07-30 20:09:10
请注意,备份服务器是一个被动的HornetQ消息服务器,在故障转移之前不能有任何生产者或使用者。
HornetQ文档(实时备份组):单/#d0e11266
https://stackoverflow.com/questions/17948742
复制相似问题