我有一个可创建jms模板的bean,用于在ems服务器下发送或接收messgae。它使用@Bean注入连接工厂和其他工厂。
我使用@JmsListener接收消息,但是它无法从队列接收消息,并且接收者计数显示为0。
但是我尝试使用xml而不是@Bean注入bean,它可以工作。
我不知道为什么,这让我困惑了很久。
这是要与@Bean一起注入的bean
@Bean
public ConnectionFactory connectFactory() {
TibjmsConnectionFactory factory = new TibjmsConnectionFactory(emsUrl);
factory.setUserName(emsUsername);
factory.setUserPassword(emsPassword);
return factory;
}
@Bean
@Primary
public CachingConnectionFactory cachingConnectionFactory(ConnectionFactory connectionFactory) {
CachingConnectionFactory factory = new CachingConnectionFactory();
factory.setTargetConnectionFactory(connectionFactory);
factory.setSessionCacheSize(100);
return factory;
}
@Bean
public JmsTemplate jmsQueueTemplate(CachingConnectionFactory cachingConnectionFactory) {
JmsTemplate template = new JmsTemplate();
template.setConnectionFactory(cachingConnectionFactory);
return template;
}
这是xml注入
<bean id="connectionFactory" class="com.tibco.tibjms.TibjmsConnectionFactory">
<constructor-arg value="${ems.jms.url}" />
<property name="UserName" value="${ems.jms.username}" />
<property name="UserPassword" value="${ems.jms.password}" />
</bean>
<bean id="cachingConnectionFactory"
class="org.springframework.jms.connection.CachingConnectionFactory">
<property name="targetConnectionFactory" ref="connectionFactory" />
<property name="sessionCacheSize" value="30" />
</bean>
<bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory">
<ref bean="cachingConnectionFactory" />
</property>
</bean>
@JmsListener
@JmsListener(destination = requestQueue)
public void process(String json) throws JsonProcessingException {
XXXXX
}