【发布时间】:2014-01-13 22:17:17
【问题描述】:
我正在使用以下 DefaultMessageListenerContainer 创建一个持久订阅,即使在停机时间也能获取消息,这确实很有效。
@Bean
ConnectionFactory connectionFactory() {
SingleConnectionFactory connectionFactory = new SingleConnectionFactory(new ActiveMQConnectionFactory(
AMQ_BROKER_URL));
connectionFactory.setClientId(CLIENT_ID);
return connectionFactory;
}
@Bean
DefaultMessageListenerContainer container(final MessageListener messageListener,
final ConnectionFactory connectionFactory) {
return new DefaultMessageListenerContainer() {
{
setMessageListener(messageListener);
setConnectionFactory(connectionFactory);
setDestinationName(JMS_TARGET);
setPubSubDomain(true);
setSessionTransacted(true);
setSubscriptionDurable(true);
setDurableSubscriptionName(SUBSCRIPTION_ID);
setConcurrentConsumers(1);
}
};
}
问题是:当我不再需要订阅时,删除订阅的最佳方法是什么?是否可以暂时删除订阅(并错过一些消息),但稍后再启用它?
到目前为止,唯一可行的方法是关闭 DMLC,然后调用取消订阅。
dmlc.shutdown();
Connection connection = connectionFactory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
session.unsubscribe(SUBSCRIPTION_ID);
这是一个明智的解决方案吗?如何重新开始订阅?
我已经看过this answer,但我真的不知道该怎么做?或者以完全不同的方式订阅和取消订阅会更好吗?
【问题讨论】:
标签: java spring publish-subscribe spring-jms