最近我想出了一个问题。如何使 Camel 应用程序限制同时服务的连接。首先,我想到了 Throttler EIP,但在阅读了它之后没有考虑使用它,并得出结论认为它不适合我的需要。配置为每秒最多 10 条消息的 Throttler 将只允许这么多消息通过我的消息系统,即使这 10 个请求在几毫秒内得到处理。我需要提供 10 个并发连接,这意味着我每秒可以处理数百条消息——但永远不能超过 10 个连接的限制。如果超过,我必须向调用者返回一个异常,告诉他一次不允许使用超过 10 个连接。我不能以任何方式排队他的请求,
然后我发现 SEDA 组件可以满足我的需要。如果有 10 个并发消费者,队列大小为 0(零),我将获得同时提供 10 个连接的限制,并且每个新连接都将被拒绝。问题是 SEDA 在 Camel 2.10.3 中的行为方式。当我配置“size=0”时,它会自动使用 Integer.MAX_VALUE(在 jConsole 中看到)。当我将队列设置为“1”时,它按预期工作,但我根本没有任何队列。
搜索 Camel SEDA 的源代码,我看到它使用 LinkedBlockingQueue 作为 SEDA 队列,容量不能为 0。所以使用默认构造函数,确实使用 Integer.MAX_VALUE 作为队列。
我错过了什么吗?还有其他方法可以解决我的问题吗?
任何帮助是极大的赞赏!