2016-11-24 101 views
0

我们希望使用delay feature from activeMQ来延迟参与事件。 AMQ_SCHEDULED_DELAY如何在内部工作?在文档中是关于调度程序的信息,但没有信息它使用什么机制来延迟消息。出于这个原因,我们不确定延迟是如何影响activeMQ的。 activeMQ是否利用池化或异步到达存档延迟。ActiveMQ AMQ_SCHEDULED_DELAY消息是如何工作的?

我问这个问题,因为我的组织的人想挑选不同的技术。我从activeMQ没有任何证明延迟是更好的。

Here是链接到源代码。我正在考虑查找代码,但我不擅长java。谁能帮忙?

回答

1

可以使用activemq web控制台进行性能测试。有一个选项可以发送具有可配置延迟和消息数量的消息。它不回答我的问题,但它似乎是比较两种方法的最佳选择。

1

ActiveMQ的默认实现确实利用了轮询。

活动MQ在内部保持后台调度程序线程对调度(或延迟)消息的轮询。该线程读取预定事件(或消息)的列表并触发作业,在触发作业事件之前根据需要重新计划重复作业。

计划事件的列表按照排序顺序存储在activemq的内部存储器中。所以在轮询期间,它只是读取计划进行最早处理的事件。由于消息在设定期间持续存在,因此在处理期间安排很多消息不会有明显的性能影响。

但是在采用之前,您可以设置您的基准测试,而不用担心很多内部实现细节,以查看您的性能/ SLA要求是否得到满足。

有关更多详细信息,请参阅作业调度程序API的Javadoc。对于默认实现,你可以参考the code

希望这会有所帮助。

+0

感谢您查找负责该功能的代码。它似乎更像是像史蒂夫指出的异步 –

1

在查看@skadya提到的源代码时,术语“轮询”不是我所理解的。它似乎使用Java对象类'等待(长超时)方法来确定何时“唤醒”运行作业的线程。

所以,我不会称之为投票。我将其称为一种异步机制,在该机制中,延迟/超时被设置为使得线程将被唤醒(例如,在适当的时间运行下一个计划作业),通过超时设置为适合下一个计划作业的值毕业典礼。

Javadoc中Object.wait(long timeout)

注意,对于的Object.wait实现是由JDK/JRE/JVM对于给定的平台提供的本地(即,非Java)实现。为了什么是值得的。

+0

我不擅长java,但在我看来,你是对的。 –