我正在使用JmsTemplate向IBM MQ队列发送消息或从IBM MQ队列接收消息。我的应用程序安装在WebSphere Application Server 8.0上,为了检索连接,我使用jndi查找。
我有6个队列,我需要根据情况从其中提取/删除xml。另外,我已经在WAS中添加了这些队列。我需要帮助来了解两件事:
我应该使用DynamicDestinationResolver
还是JndiDestinationResolver
?
根据我的理解,我应该使用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" />
答案 0 :(得分:0)
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
)中查找bean。然后,您的JMS代码将指向Bean名称而不是JNDI名称。
jmsTemplate.convertAndSend("drop278", "Your-Message-Here");
因此,要使用哪一个取决于您的偏好。