簡體   English   中英

與WebSphere JMS IBM MQ提供程序的Spring集成

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM