ActiveMQ队列消息时间戳



我使用ActiveMQ来收集来自队列中不同生产者的消息。我注意到,准备在代理队列中使用的消息有一个名为"时间戳"的字段。这是消息由生产者发送到代理的时间,还是代理接收消息的时间?如果第一种情况成立,则假设生产者P1在t1时刻发送消息,消息在t2时刻到达代理,另一个生产者P2在t3时刻发送消息,代理在t4时刻收到消息,t3>T1和t2>t4。以什么顺序将这些消息排队并使用?所以我想知道队列中消息的顺序是由代理接收这些消息的顺序决定的,还是由它们"发送"的时间戳决定的。

如果我的问题有点混乱,请道歉,

谢谢你的帮助!

我用这些行发送消息:

Destination destination = session.createQueue(jmsQueue);
producer = session.createProducer(destination);
TextMessage toSend = session.createTextMessage("some message");
producer.send(toSend);
/*
I'm not creating a session every time, I just want to show how I send messagges, with this example.
*/

这是activemq的web控制台的屏幕截图,其中显示了"时间戳"。我所指的性质。图片

队列中消息的顺序是由代理接收这些消息的顺序决定的,而不是由消息发送的时间决定的。消息的时间戳属性不能以任何方式确定消息在队列中的顺序。

消息到达代理时,它们被放置在队列中。队列是有序的,具有先进先出(即FIFO)语义。消息可能有时间戳,也可能没有。有些协议和api使用时间戳,有些则不使用。消息是否具有时间戳与消息在队列中的顺序没有根本关系。

如果消息有时间戳,这些时间戳可以反映队列中消息的顺序。但话说回来,他们可能不会。时间戳不确定队列中消息的顺序。

最新更新