我已经按照spring文档并设置了一个Spring JMS监听器。然而,即使我向队列添加消息,我的代码也没有检测到这一点。我的春季配置如下:
<bean id="dataSourceListener" class="oracle.jdbc.pool.OracleDataSource">
<property name="URL" value="xxx"/>
<property name="user" value="xxx"/>
<property name="password" value="xxx"/>
</bean>
<bean id="jmsConnectionFactory" class="OracleAqFactoryBean">
<property name="dataSource" ref="dataSourceListener" />
</bean>
<jms:listener-container connection-factory="jmsConnectionFactory" acknowledge="transacted" concurrency="1-5">
<jms:listener destination="queuename" ref="myMessageListener"/>
</jms:listener-container>
<bean id="myMessageListener" class="Listener"/>
我的Java如下:
我的自定义监听器:
class Listener implements MessageListener {
@Override
void onMessage(Message message) {
// code to handle message is here
}
}
我的OracleAqFactoryBean:
public class OracleAqFactoryBean implements FactoryBean {
private DataSource dataSource;
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
@Override
public Object getObject() throws Exception {
return AQjmsFactory.getConnectionFactory( dataSource );
}
@Override
public Class<?> getObjectType() {
return ConnectionFactory.class;
}
@Override
public boolean isSingleton() {
return true;
}
}
[编辑:上面的设置现在正在成功运作]
答案 0 :(得分:0)
我不明白为什么要将FactoryBean
实现连接到Spring DMLC destination
属性。这显然不正确,因为setDestination
method只接受javax.jms.Destination
类型。您已连接connectionFactory
和messageListener
。这就是开始使用消息所需的全部内容。如果删除已连接到testmq
属性的destination
引用,则应成功使用消息。