【发布时间】:2013-01-26 18:29:45
【问题描述】:
最近我遇到了一个问题。如何使 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 作为队列。
我错过了什么吗?还有其他方法可以解决我的问题吗?
非常感谢任何帮助!
【问题讨论】:
-
尝试格式化您的问题:)
-
我改了标题。是你的意思吗? :)
标签: java apache-camel