Пример определения компонента для JndiDestinationResolver с использованием jndi look up - PullRequest
0 голосов
/ 09 апреля 2019

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

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

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

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

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

<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" />

1 Ответ

0 голосов
/ 10 апреля 2019

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

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

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

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

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

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

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

...