我还无法单独从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。
最佳答案
可以为每条消息设置JMSExpiration属性,或者可以在目标级别(更广泛地在全局级别)设置JMSExpiration属性(在这种情况下,将覆盖在此目标中接收的所有消息的JMSExpiration)。不能为每个消费者设置。
一种选择是创建从主题到仅用户应用程序将收听的自定义队列的桥梁,并将此队列的“ expiration”属性设置为0(无限制)。然后,无论其JMSExpiration值如何,所有在该主题上发布的所有消息都将被复制到此队列,并且永远不会过期。