每个客户的Tibco JMS(EMS)TimeToLive?

时间:2014-02-07 15:27:43

标签: java tibco tibco-ems ems

我无法单独从谷歌那里得到这个。我正在连接到一个非持久的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。

1 个答案:

答案 0 :(得分:2)

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

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