Пример определения компонента для JndiDestinationResolver с использованием поиска jndi

Я работаю над отправкой и получением сообщений в/из очереди IBM MQ, используя JmsTemplate. Мое приложение установлено на сервере приложений WebSphere 8.0, и для получения соединения я использую поиск jndi.

У меня есть 6 очередей, из которых мне нужно выбирать/удалять XML-файлы в зависимости от сценариев. Также я добавил эту очередь в WAS. Мне нужна помощь, чтобы понять две вещи:

  1. Я должен использовать DynamicDestinationResolver или JndiDestinationResolver?

  2. Насколько я понимаю, я должен использовать JndiDestinationResolver; если это правильно, как я могу определить это в моем файле контекста и ссылаться на jndi-lookup для каждой очереди, чтобы я мог получить ее из своего кода при использовании отправки/получения jmsTemplate?

Пожалуйста, смотрите ниже мой файл контекста приложения:

<bean id="jmsQueueConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean"> 
<property name="jndiName" value="jms/CPC.TapQueueConnCPC" /> 
<property name="lookupOnStartup" value="false" /> 
<property name="cache" value="true" /> 
<property name="proxyInterface" value="javax.jms.QueueConnectionFactory" /> 
</bean> 
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="jmsQueueConnectionFactory" />
<property name="receiveTimeout" value="10000" /> 
<property name="sessionAcknowledgeMode" value="1" /> 
<property name="destinationResolver" ref="jmsDestResolver"/>
</bean>
<bean id="fileTransferServiceImpl" class="org.kp.cpc.service.FileTransferServiceImpl" > 
<constructor-arg name="jmsTemplate" ref="jmsTemplate" />    
</bean>
<bean id="jmsDestResolver" class=" org.springframework.jms.support.destination.JndiDestinationResolver"/>
<jee:jndi-lookup id="drop278" jndi-name="jms/CPC.SEND.AUTHREQ278" />
<jee:jndi-lookup id="drop275" jndi-name="jms/CPC.SEND.AUTHREQ275" />
<jee:jndi-lookup id="recev278" jndi-name="jms/CPC.RECE.AUTHREQ278" />
<jee:jndi-lookup id="recev275" jndi-name="jms/CPC.RECE.AUTHREQ275" />
<jee:jndi-lookup id="preAuthStatus" jndi-name="jms/CPC.RECE.PREAUTH.STSUPD278"/>
<jee:jndi-lookup id="succ278" jndi-name="jms/CPC.RECE.SUCC.AUTHRESP278" />

person Nik    schedule 09.04.2019    source источник
comment
Весь смысл JndiDestinationResolver в том, что вам не нужен jee:jndi-lookup. Пунктом назначения будет имя JNDI, на которое вы хотите его отправить. Если вы действительно хотите оставить jee:jndi-lookup, используйте вместо этого BeanFactoryDestinationResolver и используйте имя компонента в качестве места назначения.   -  person M. Deinum    schedule 10.04.2019


Ответы (1)


Вся суть JndiDestinationResolver заключается в том, что вам не нужно выполнять поиск вручную. Другими словами, при использовании JndiDestinationResolver вам не нужен <jee:jndi-lookup />, так как он обрабатывается DestinationResolver.

Имя пункта назначения будет именем JNDI. Итак, в вашем коде JMS вы должны использовать следующее.

jmsTemplate.convertAndSend("jms/CPC.SEND.AUTHREQ278", "Your-Message-Here");

JndiDestinationResolver будет использовать имя адресата для поиска JNDI.

Если вы действительно хотите убрать имена JNDI из своего кода и хотите использовать <jee:jndi-lookup />, используйте [BeanFactoryDestinationResolver]. Это будет использовать имя места назначения для поиска bean-компонента из BeanFactory (в данном случае ApplicationContext). Тогда ваш код JMS будет указывать на имя компонента вместо имени JNDI.

jmsTemplate.convertAndSend("drop278", "Your-Message-Here");

Так что, какой из них использовать, зависит от ваших предпочтений.

person M. Deinum    schedule 10.04.2019
comment
Большое спасибо за ваш ответ. Это отвечает на мой вопрос. - person Nik; 11.04.2019
comment
Разве не требуется устанавливать JndiDestinationresolver в качестве значения свойства destinationResolver? Что-то вроде этого... @Bean public JmsTemplate getJmsTemplate() { JmsTemplate template = new JmsTemplate(); template.setConnectionFactory(getFactory()); шаблон.setDeliveryMode(2); template.setMessageConverter(smartMessageConverter); template.setDestinationResolver (jndiDestinationResolver); шаблон возврата; } - person raj240; 13.12.2019
comment
Извините за неправильный формат фрагмента кода, я отсутствовал на своем рабочем месте в течение нескольких минут, редактируя комментарий, и после этого я не могу редактировать комментарий. - person raj240; 13.12.2019