[英]Spring Integration with WebSphere JMS IBM MQ provider
我们有一个提供程序为IBM MQ的WebSphere JMS Queue和QueueConnectionFactory。 我们无法直接连接到IBM MQ。
我有以下配置-我有bean jmsConnectionFactory,它可以按预期使用InitialContext创建工厂。 THE_QUEUE是我的队列的JNDI名称
<int-jms:inbound-channel-adapter channel="transformedChannel" connection-factory="jmsConnectionFactory"
destination-name="THE_QUEUE">
<int:poller fixed-delay="500" />
</int-jms:inbound-channel-adapter>
它因错误而失败
引起原因:com.ibm.msg.client.jms.DetailedInvalidDestinationException:JMSWMQ2008:无法打开MQ队列'THE_QUEUE'。 JMS尝试执行MQOPEN,但是WebSphere MQ报告了错误。 使用链接的异常来确定此错误的原因。 检查是否正确定义了指定的队列和队列管理器。
我的出站频道配置
<int-jms:outbound-channel-adapter id="respTopic"
connection-factory="jmsConnectionFactory"
destination-name="THE_REPLYQ" channel="process-channel"/>
如果我使用Java代码,则可以从session.createProducer创建MessageProducer并发送消息,请在queuesession.createConsumer(outQueue);上创建MessageConsumer。 并接收()
请协助您,如何使用Spring集成和流程消息为这些队列创建jms入站和出站适配器
编辑:
@Bean
public ConnectionFactory jmsConnectionFactory(){
ConnectionFactory connectionFactory = null ;
Context ctx = null;
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory");
p.put(Context.PROVIDER_URL, "iiop://hostname.sl");
p.put("com.ibm.CORBA.ORBInit", "com.ibm.ws.sib.client.ORB");
try {
ctx = new InitialContext(p);
if (null != ctx)
System.out.println("Got naming context");
connectionFactory = (QueueConnectionFactory) ctx.lookup
("BDQCF");
}...
@Bean
public JmsListenerContainerFactory<?> mydbFactory(ConnectionFactory jmsConnectionFactory,
DefaultJmsListenerContainerFactoryConfigurer configurer) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
configurer.configure(factory, jmsConnectionFactory);
return factory;
}
代码和配置适用于使用WebSphere默认JMS提供程序的队列
EDIT2:注释后添加代码
<int:channel id="jmsInputChannel" />
<jee:jndi-lookup id="naarconnectionFactory" jndi-name="MQ_QUEUE" resource-ref="false">
<jee:environment>
java.naming.factory.initial=com.ibm.websphere.naming.WsnInitialContextFactory
java.naming.provider.url=iiop://host.ws
</jee:environment>
</jee:jndi-lookup>
<int-jms:inbound-channel-adapter id="jmsIn" channel="jmsInputChannel"
connection-factory="jmsNAARConnectionFactory" destination-name="naarconnectionFactory">
<int:poller fixed-delay="500" />
</int-jms:inbound-channel-adapter>
您不仅可以在那里使用JNDI名称-您必须执行JNDI查找以将其解析为Destination
请参阅Spring JMS文档 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.