У нас есть 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>