Spring Integration с провайдером WebSphere JMS IBM MQ - PullRequest
0 голосов
/ 03 мая 2018

У нас есть WebSphere JMS Queue и QueueConnectionFactory с поставщиком в качестве 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 'THE_QUEUE'. JMS попытался выполнить MQOPEN, но WebSphere MQ сообщил об ошибке. Используйте ссылку исключение, чтобы определить причину этой ошибки. Проверьте, что указанные очередь и администратор очередей определены правильно.

Моя исходящая конфигурация канала

<int-jms:outbound-channel-adapter id="respTopic" 
connection-factory="jmsConnectionFactory" 
destination-name="THE_REPLYQ" channel="process-channel"/>

Если я использую код Java - это работает создание MessageProducer из session.createProducer и отправка сообщения, создать MessageConsumer в queuesession.createConsumer (outQueue); и получить ()

Пожалуйста, помогите, как я могу создать входящие и исходящие адаптеры jms для этих очередей, используя интеграцию Spring и обрабатывать сообщения

EDIT:

   @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;
}

Код и конфигурация работают для очереди, в которой используется поставщик JMS по умолчанию WebSphere

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 голосов
/ 03 мая 2018

Вы не можете просто использовать имя JNDI там - вы должны выполнить поиск JNDI, чтобы преобразовать его в Destination - см. Документацию Spring JMS .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...