我想创建一个代理来代理嵌入式代理中ActiveMQ和WebSphere MQ之间的连接.我知道在activemq中存在网络连接器来执行此操作(代理到代理),但我不知道如何配置它以连接到WebSphere MQ.在网上搜索我发现了一些不同的XML配置方法,我发现使用的XML标签不是指网络连接器,而是引用< jmsBridgeConnectors>,所以我通过使用来研究这个桥连接器java代码,但我无法找到指向我如何做到这一点的东西.
是否有明确的方法将ActiveMQ中的桥接连接器配置为WebSphere MQ,对于嵌入式代理,通过使用Java代码来使用XML配置?
我知道通过使用XML配置是可能的,但是,如果我正在实现嵌入式代理(如前所述),并且我想使用java代码配置具有到WebSphere MQ的桥接器的代理实例,那么ActiveMQ在API上提供类或接口来执行此操作?
这就是我为连接两个activemq代理所做的工作
try {
getBroker().addConnector("tcp://localhost:61616");
getBroker().addNetworkConnector("static:(tcp://remotBroker:61616)");
} catch (Exception e) {
logger.error("Unexpected ERROR, connection lost.");
e.printStackTrace();
}
一个TransportConnector用于侦听端口61616和一个网络连接器以建立从本地代理到remoteBroker的连接,两个代理都是
activemq的实例.现在我希望使用Java代码从我的ActiveMQ本地代理到WebSphere MQ代理的连接,而不是XML.
解决方法:
这很简单.
以下示例将ActiveMQ队列QUEUE42上的所有消息发送到远程WebSphere MQ代理.更改连接设置.
这要求您在类路径上有一些WMQ库:com.ibm.mq.jar和com.ibm.mqjms.jar(至少).诀窍是简单地创建一个带有QueueConnectionFactory(到WMQ)的JmsQueueConnector以及你想要的任何入站/出站桥.网桥只是将被复制的队列名称.
BrokerService broker = new BrokerService();
broker.setBrokerName("amqbroker");
broker.setPersistent(false);
broker.setTransportConnectorURIs(new String[] {"tcp://localhost:61616"});
// setup bridge
JmsQueueConnector qCon = new JmsQueueConnector();
JmsFactoryFactory ff = JmsFactoryFactory.getInstance(WMQConstants.WMQ_PROVIDER);
JmsQueueConnectionFactory cf = ff.createQueueConnectionFactory();
cf.setStringProperty(WMQConstants.WMQ_HOST_NAME, "192.168.13.151");
cf.setIntProperty(WMQConstants.WMQ_PORT, 1414);
cf.setStringProperty(WMQConstants.WMQ_CHANNEL, "SYSTEM.DEF.SVRCONN");
cf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);
cf.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, "SUPERHERO");
qCon.setOutboundQueueConnectionFactory(cf);
OutboundQueueBridge outBridge1 = new OutboundQueueBridge("QUEUE42");
qCon.setOutboundQueueBridges(new OutboundQueueBridge[] {outBridge1});
broker.setJmsBridgeConnectors(new JmsConnector[] {qCon});
broker.start();