[英]Configure clustered hornetq client with spring
我正在尝试使用hornetq核心API和将是HA的spring来定义hornetq客户端。 但是,当我停止实时服务器,而备份服务器变为“实时”时,客户端将失败,并显示连接错误。 知道我在做什么错吗?
我定义了群集的独立hornetq服务器(没有组或发现)。 hornetq-configuration.xml文件:
...
<connectors>
<connector name="netty">
<factory-class>org.hornetq.core.remoting.impl.netty.NettyConnectorFactory</factory-class>
<param key="host" value="${hornetq.remoting.netty.host:live-host}"/>
<param key="port" value="${hornetq.remoting.netty.port:5445}"/>
</connector>
<!-- Connector to this server.s backup. This is needed for failback to work properly in a static cluster -->
<connector name="netty-backup">
<factory-class>org.hornetq.core.remoting.impl.netty.NettyConnectorFactory</factory-class>
<param key="host" value="${hornetq.remoting.netty.host:backup-host}"/>
<param key="port" value="${hornetq.remoting.netty.port:5446}"/>
</connector>
<cluster-connections>
<cluster-connection name="my-cluster">
<address>jms</address>
<connector-ref>netty</connector-ref>
<retry-interval>500</retry-interval>
<use-duplicate-detection>true</use-duplicate-detection>
<forward-when-no-consumers>false</forward-when-no-consumers>
<max-hops>1</max-hops>
<static-connectors>
<!-- Without this the connection factory won.t be able to reconnect on failback -->
<connector-ref>netty-backup</connector-ref>
</static-connectors>
</cluster-connection>
...
我定义了hornetq客户端:
@Test
public void testHA() throws InterruptedException, IOException{
List<TransportConfiguration> transportConfigurationList = new ArrayList<TransportConfiguration>();
Map<String, Object> transportProperties = new HashMap<String, Object>();
transportProperties.put("host", "live-server");
transportProperties.put("port", 5445);
transportConfigurationList.add(new TransportConfiguration("org.hornetq.core.remoting.impl.netty.NettyConnectorFactory", transportProperties));
transportProperties = new HashMap<String, Object>();
transportProperties.put("host", "backup-server");
transportProperties.put("port", 5446);
transportConfigurationList.add(new TransportConfiguration("org.hornetq.core.remoting.impl.netty.NettyConnectorFactory", transportProperties));
HornetQJMSConnectionFactory connectionFactory = new HornetQJMSConnectionFactory(true, transportConfigurationList.toArray(new TransportConfiguration[2]));
JmsTemplate producer = new JmsTemplate(connectionFactory);
producer.send(new HornetQTopic("deploy"), new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
TextMessage txtMessage = session.createTextMessage("my message");
return txtMessage;
}
});
System.out.println("Stop live server");
System.in.read();
producer.send(new HornetQTopic("deploy"), new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
TextMessage txtMessage = session.createTextMessage("my message");
return txtMessage;
}
});
Thread.sleep(60000);
}
OUTPUT:
Stop live server
Apr 30, 2012 5:08:32 PM org.hornetq.core.logging.impl.JULLogDelegate warn
WARNING: Tried 1 times to connect. Now giving up on reconnecting it.
另外,实时服务器出现日志错误:
我找到了如何创建与HA一起使用的hornetq客户端的方法,但它要求我使用JNDI并通过查找获得连接工厂。 我确实是这样的:
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
<property name="environment">
<props>
<prop key="java.naming.provider.url">jnp://jndi-host:jndi-port</prop>
<prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop>
</props>
</property>
</bean>
<bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiTemplate" ref="jndiTemplate" />
<property name="jndiName" value="ConnectionFactory" />
</bean>
没有JNDI,有没有办法创建这样的客户端?
spring config设置HornetQ故障转移到备份服务器
<bean id="hornetQConnectionFactory" class="org.hornetq.jms.client.HornetQJMSConnectionFactory">
<constructor-arg index="0" name="ha" value="true" />
<constructor-arg index="1">
<list>
<bean class="org.hornetq.api.core.TransportConfiguration">
<constructor-arg value="org.hornetq.core.remoting.impl.netty.NettyConnectorFactory" />
<constructor-arg>
<map key-type="java.lang.String"
value-type="java.lang.Object">
<entry key="host" value="Q-server-1"></entry>
<entry key="port" value="5445"></entry>
</map>
</constructor-arg>
</bean>
<bean class="org.hornetq.api.core.TransportConfiguration">
<constructor-arg value="org.hornetq.core.remoting.impl.netty.NettyConnectorFactory" />
<constructor-arg>
<map key-type="java.lang.String"
value-type="java.lang.Object">
<entry key="host" value="Q-server2"></entry>
<entry key="port" value="5446"></entry>
</map>
</constructor-arg>
</bean>
</list>
</constructor-arg>
</bean>
Q1是主要的,而Q2是备用的。 适用于HornetQ hornetq-2.4.0.Final独立安装,以及hornetq-jms-client版本的客户端:2.4.5.Final
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.