如何在spring上下文中配置多个远程activemq代理(不同的IP地址)?以下是1个远程代理的配置。我使用camel创建路由,从多个远程代理中的不同队列生成和使用消息。根据以下路由,系统如何知道每个队列属于哪个远程代理?
列出项目
从( “直接:启动”)。向( “ActiveMQ的:队列:outgoingRequests”)
列出项目
从( “ActiveMQ的:队列:incomingOrders”)。向(“日志:事件? SHOWALL =真 “)至(” 豆:JMSService中“)
1个经纪人的春季背景 org.camel.routes
<bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://10.1.11.97:61616" />
</bean>
<bean id="pooledConnectionFactory"
class="org.apache.activemq.pool.PooledConnectionFactory" init-
method="start" destroy-method="stop">
<property name="maxConnections" value="8" />
<property name="connectionFactory" ref="jmsConnectionFactory" />
</bean>
<bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration">
<property name="connectionFactory" ref="pooledConnectionFactory"/>
<property name="concurrentConsumers" value="10"/>
</bean>
<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
<property name="configuration" ref="jmsConfig"/>
</bean>
答案 0 :(得分:15)
只需添加更多具有不同名称的组件
<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
<property name="configuration" ref="jmsConfig"/>
</bean>
<bean id="activemq2" class="org.apache.activemq.camel.component.ActiveMQComponent">
<property name="configuration" ref="myOtherJmsConfig"/>
</bean>
然后只需使用名称:
<from uri="activemq:queue:MY.QUEUE"/><!-- get from "1st" ActiveMQ -->
<to uri="activemq2:queue:MY.QUEUE"/> <!-- put to same queue name on other ActiveMQ -->
实际上,您可以随意调用它们,例如“EuropeanMarketBroker”或其他任何适用品。
答案 1 :(得分:0)
我一直在尝试实现这一点,不同之处在于我的弹簧配置不在xml中。知道通过几种方式使用spring注释可以获得相同的结果是有帮助的。
实现这一目标的关键是使用所需名称注册组件。 例如:
camelContext.addComponent("activemq2", jmsComponentInstance);
实现这一目标有两种方法。即通过创建两个带有限定符的bean,这些bean可以相互标识它们,然后连接这些bean并将它们注册为组件。或者(这是可取的)您可以创建bean并一次注册该组件。以下是两者的示例:
1 - 创建Bean并在其他地方注册
@Configuration
public class ClassA{
@Bean @Qualifier("activemq2") public JmsComponent createJmsComponent(){
return JmsComponent.jmsComponentAutoAcknowledge(..);//Initialise component from externalised configs
}
}
@Component
public class ClassB{
@Autowired private CamelContext camelContext;
@Autowired @Qualifier("activemq2")
private JmsComponent jmsComponent;
public void someMethod(){
camelContext.addComponent("activemq2", jmsComponent);
}
}
2 - 创建Bean并在@Configuration bean中的一个位置注册。
@Bean @Autowired public JmsComponent createJmsComponent(CamelContext camelContext){
JmsComponent component = JmsComponent.jmsComponentAutoAcknowledge(..);//Initialise component from externalised configs
camelContext.addComponent("activemq2", component);//Add Component to camel context
return component;//Return component instance
}