Spring与WebSphere JMS集成IBM MQ提供程序

时间:2018-05-02 22:17:53

标签: jms spring-integration ibm-mq

我们有一个WebSphere JMS Queue和QueueConnectionFactory,其中provider是IBM MQ。我们无法直接连接到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队列&#39; THE_QUEUE&#39;。 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>

1 个答案:

答案 0 :(得分:0)

您不能在那里使用JNDI名称 - 您必须执行JNDI查找才能将其解析为Destination - 请参阅Spring JMS Documentation