Tibco JMS (EMS) TimeToLive для каждого клиента?

Я не смог выяснить это только с помощью 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.


person Matt    schedule 07.02.2014    source источник


Ответы (1)


Свойство JMSExpiration можно установить для каждого сообщения или, более глобально, на уровне назначения (в этом случае JMSExpiration всех сообщений, полученных в этом месте назначения, переопределяется). Его нельзя установить для каждого потребителя.

Один из вариантов - создать мост от темы к настраиваемой очереди, которую будет слушать только ваше приложение-потребитель, и установить для свойства «истечение срока» этой очереди значение 0 (неограниченно). Все сообщения, опубликованные в теме, будут скопированы в эту очередь и никогда не истечут, независимо от их значения JMSExpiration.

person Nicolas Heitz    schedule 07.02.2014
comment
Не тот ответ, на который я надеялся, лол - мне нравится ваша идея «настраиваемой очереди с собственным TTL», спасибо! - person Matt; 08.02.2014