【问题标题】:How to subscribe to a Durable TOPIC using Apache camel / Spring-boot?如何使用 Apache camel / Spring-boot 订阅持久主题?
【发布时间】:2018-03-27 14:29:11
【问题描述】:

每当我启动订阅者时,它都不会出现在我的 activeMQ 上的“Active Durable Topic Subscribers”部分下。这意味着它还不是一个持久的主题订阅者。我怎样才能使它成为持久订阅者?

JmsComponent jmsComponent = JmsComponent
        .jmsComponentTransacted(connectionFactory, jmsTransactionManager);
// TODO
jmsComponent.setClientId(subscriptionClientId);
jmsComponent.setDurableSubscriptionName(subscriptionName);
jmsComponent.setSubscriptionDurable(true); // This is enabled by default
//jmsComponent.setMaxConcurrentConsumers(maxConcurrentConsumers);
jmsComponent.setAcknowledgementMode(Session.AUTO_ACKNOWLEDGE);

return jmsComponent;

P.S:它适用于非持久订阅者。我添加了以下代码以使其耐用。我错过了什么吗?还需要补充什么吗?

jmsComponent.setClientId(subscriptionClientId);
jmsComponent.setDurableSubscriptionName(subscriptionName);
jmsComponent.setSubscriptionDurable(true); // This is enabled by default

【问题讨论】:

  • 出于好奇:您为什么使用 JMS 组件而不是 ActiveMQ 组件?
  • 您好,使用通用 JMS 组件而不是 activeMQ 的原因是为了支持不同的客户端,例如其中一些将具有 IBM-MQ,而其中一些将具有 activeMQ。

标签: java spring-boot apache-camel activemq spring-jms


【解决方案1】:

我通过将订阅详细信息作为查询字符串参数传递给它,如下所示;

myapp.jms.topic.inbound1=jms:topic:myFirstTopic?clientId=ABC&durableSubscriptionName=ABC

myapp.jms.topic.inbound2=jms:topic:mysecondTopic?clientId=XYZ&durableSubscriptionName=XYZ

【讨论】:

  • clientId 每个 JMS 连接不应该是唯一的吗?这是否意味着我们应该只在我们的 jmsComponent 上 setClientId 一次,并且只在我们作为查询字符串参数传递的骆驼 uri 中使用不同的唯一持久订阅名称?
猜你喜欢
  • 2018-01-15
  • 2015-08-11
  • 1970-01-01
  • 1970-01-01
  • 2018-05-25
  • 1970-01-01
  • 1970-01-01
  • 2017-09-05
  • 1970-01-01
相关资源
最近更新 更多