当Throttler开始/停止节流时,如何向端点发送通知?

时间:2019-02-14 21:24:15

标签: apache-camel

正如标题所述,如果要发送给该端点的消息开始受到限制,我想向该端点发送通知,而当限制停止时,我希望向该端点发送一条消息。

我目前具有以下(非常基本的)路由配置:

from("test-jms:queue:test.queue")
.throttle(2)
.to("file://test");

此配置可以很好地阻止消息,但是我需要一种让消费者知道消息正在被阻止的方法。

当Throttler开始节流时,我想向'to'端点发送一条通知,以便那些阅读消息的人知道他们正在节流。我也希望能够在节流阀不再节流时发送另一条消息,以便消费者知道消息是最新的。

这似乎不是Throttler所做的。我看到的在启动节流时收到通知的唯一方法是将rejectExecution设置为true,这时它将引发异常。问题在于执行从那时开始停止,并且不再传递任何消息(因为引发了异常)。

我目前的想法是,我将需要创建一个自定义的bean /处理器/某种功能,该功能与Throttler具有本质上相同的功能,但是在节流开始或停止时也会注入一条消息。不过,除非我确实需要,否则我不想这样做。任何帮助表示赞赏。谢谢!

1 个答案:

答案 0 :(得分:1)

没有节流阀eip不支持此类信息(但是您可以通过JMX获取一些统计信息)。另一种想法是改变方向,以便消费者在需要新消息时向上游发出信号(这是反应式系统所做的)。

我假设以上内容只是写一个例子,您在现实生活中使用的消费者是什么,他们是否真的需要知道一些消息在1秒的短时间内被备份了,因为它们被节流了吗?同样,由于您的来源是JMS,因此您还可以查看路由限制策略,在该策略中您可以挂起/恢复JMS使用者,而不使用节流器EIP。