我可以与JMS消息选择器的当前日期进行比较吗?

我可以与JMS消息选择器的当前日期进行比较吗?,jms,tibco-ems,Jms,Tibco Ems,我想将消息放入一个以日期/时间作为消息属性的队列中,并在该属性满足与当前日期相关的条件时从队列中提取消息 例如,假设我想在3:00使用消息。我的想法是将属性设置为3:00,然后有一个消息选择器,比如event_timestamp任何东西都可以放入消息的用户定义属性中。例如,用户属性MyTimeStamp和该属性的值设置为3.00,则可以使用选择器,其中可以将选择器设置为MyTimeStamp='3.00'。消息到达队列后将立即传递给等待的消费者。这并不意味着当系统时间为下午3点时,信息将发送给消

我想将消息放入一个以日期/时间作为消息属性的队列中,并在该属性满足与当前日期相关的条件时从队列中提取消息


例如,假设我想在3:00使用消息。我的想法是将属性设置为3:00,然后有一个消息选择器,比如event_timestamp任何东西都可以放入消息的用户定义属性中。例如,用户属性MyTimeStamp和该属性的值设置为3.00,则可以使用选择器,其中可以将选择器设置为MyTimeStamp='3.00'。消息到达队列后将立即传递给等待的消费者。这并不意味着当系统时间为下午3点时,信息将发送给消费者

任何内容都可以放入消息的用户定义属性中。例如,用户属性MyTimeStamp和该属性的值设置为3.00,则可以使用选择器,其中可以将选择器设置为MyTimeStamp='3.00'。消息到达队列后将立即传递给等待的消费者。这并不意味着当系统时间为下午3点时,信息将发送给消费者

据我所知,JMS规范中没有可用于选择器的函数。可能一些存在于特定于供应商的实现扩展中,但根据所述,在tibco中不存在

由于message selector是特定MessageConsumer的固定参数,因此每次更改此选择器查询时,您都必须使用当前日期或其他内容创建选择器字符串,并调用Session.createDurableSubscriber或Session.createBrowser

我建议您为所有用户保持相同的连接和会话,以保持合理的性能

另一种选择是使用消息浏览器打开消息的属性来计算您的条件,然后决定在匹配的情况下有效地使用它,但这种想法肯定是一种常规轮询,它打破了消息传递的理念


我猜您会在定义的时间戳之后发布一条消息以供将来处理。由于消息过期,可能还有另一种方法来实现您的需求。通常,可以将代理配置为将过期消息从队列a移动到另一个队列B,这样它就可以为您完成这项工作:您的消费者只在队列B过期后侦听队列B上可用的消息。

据我所知,JMS规范中没有可用于选择器的函数。可能一些存在于特定于供应商的实现扩展中,但根据所述,在tibco中不存在

由于message selector是特定MessageConsumer的固定参数,因此每次更改此选择器查询时,您都必须使用当前日期或其他内容创建选择器字符串,并调用Session.createDurableSubscriber或Session.createBrowser

我建议您为所有用户保持相同的连接和会话,以保持合理的性能

另一种选择是使用消息浏览器打开消息的属性来计算您的条件,然后决定在匹配的情况下有效地使用它,但这种想法肯定是一种常规轮询,它打破了消息传递的理念


我猜您会在定义的时间戳之后发布一条消息以供将来处理。由于消息过期,可能还有另一种方法来实现您的需求。一般来说,可以将代理配置为将过期消息从队列a移动到另一个队列B,这样它就可以为您完成这项工作:您的消费者只在队列B过期后侦听队列B上可用的消息。

您可以使用自1970年以来以Unix时间/历元时间秒为单位的JMSTimestamp。这是一个漫长的过程


我没有尝试过,但它似乎很简单。

您可以使用JMSTimestamp,它自1970年以来一直使用Unix时间/纪元时间秒。这是一个漫长的过程


我没有尝试这个,但它似乎很简单。

如果您的服务器与JMS 2.0兼容,请使用传递延迟功能:JMSProducer.setDeliveryDelaylong deliveryDelay。 当您将消息放入队列时,请计算到所需时间的延迟。 延迟到期时,消息将可见

如果您的服务器与JMS 2.0兼容,请使用传递延迟功能:JMSProducer.setDeliveryDelaylong deliveryDelay。 当您将消息放入队列时,请计算到所需时间的延迟。 延迟到期时,消息将可见

是的,所以问题的重点是如何与当前时间进行比较,而不是某个预定义的时间..是的,所以问题的重点是如何与当前时间进行比较,您可能需要提供一些代码来演示如何进行比较您可能需要提供一些代码来演示如何进行比较您是否了解这一点。答案是否定的,你不能在选择器中使用这种比较语法吗?你知道这一点吗。如果答案为否,则不能在选择器中使用此比较语法?