【问题标题】:Tibco JMS (EMS) TimeToLive per client?每个客户的 Tibco JMS (EMS) TimeToLive?
【发布时间】:2014-02-08 03:37:48
【问题描述】:

我无法仅从 Google 中找出这一点。我正在连接到一个非持久 EMS 主题,该主题发布一组数据的更新。如果我跳过一些更新,没关系,因为接下来的更新无论如何都会覆盖它。

在 EMS 主题上发布的消息数量非常多,有时无论出于何种原因,消费者都会落后。有没有办法在客户端连接端确定消息的“生存时间”?我知道在其他经纪人上也有,但特别是在 Tibco 上,我一直无法弄清楚这是否可能,只是这个参数绝对可以在服务器端为所有客户端设置(这不是我的选择)。

我正在创建我的连接工厂,然后使用以下代码创建一个 Apache Camel jms 端点:

    TibjmsConnectionFactory connectionFactory = new TibjmsConnectionFactory();
    connectionFactory.setServerUrl(properties.getProperty(endpoints.getServerUrl()));
    connectionFactory.setUserName(properties.getProperty(endpoints.getUsername()));
    connectionFactory.setUserPassword(properties.getProperty(endpoints.getPassword()));

    JmsComponent emsComponent = JmsComponent.jmsComponent(connectionFactory);
    emsComponent.setAsyncConsumer(true);
    emsComponent.setConcurrentConsumers(Integer.parseInt(properties.getProperty("jms.concurrent.consumers")));
    emsComponent.setDeliveryPersistent(false);
    emsComponent.setClientId("MyClient." + ManagementFactory.getRuntimeMXBean().getName() + "." + emsConnectionNumber.getAndIncrement());
    return emsComponent;

我正在使用 tibjms-6.0.1、tibjmsufo-6.0.1 和其他各种 tib***-6.0.1。

【问题讨论】:

    标签: java tibco tibco-ems ems


    【解决方案1】:

    JMSExpiration 属性可以设置每条消息,或者更全局地,在目标级别(在这种情况下,在此目标中接收到的所有消息的 JMSExpiration 都会被覆盖) .不能为每个消费者设置。

    一种选择是创建一个从主题到自定义队列的桥梁,只有您的消费者应用程序才会侦听该队列,并将此队列的“过期”属性设置为 0(无限制)。然后,在该主题上发布的所有消息都将被复制到此队列中,并且永远不会过期,无论它们的 JMSExpiration 值如何。

    【讨论】:

    • 不是我希望得到的答案,哈哈——不过,我喜欢你的“带有自己 TTL 的自定义队列”的想法,谢谢!
    猜你喜欢
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    相关资源
    最近更新 更多