JBoss AS7 JMS集群与Spring应用程序
我在JBoss7JMS集群上运行SpringWebApp时遇到问题 我通过这个设置JMS集群-集群使用共享日志。我使用的是来自的live1和backup1配置。例如,使用包含消息驱动Bean的应用程序在实时服务器和备份服务器之间切换是可行的 我创建了注册JMS侦听器的简单SpringWeb应用程序 我的jms-config.xml如下: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
<?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名称下的资源
下面是一个使用mavenmvn包构建的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);
}
}
}