【问题标题】:Throttling by rejecting based on response payload size in Apache Camel通过拒绝基于 Apache Camel 中的响应有效负载大小来进行节流
【发布时间】:2015-04-22 06:08:05
【问题描述】:

我有一个要求,即我们基于 Camel 的应用程序也可以获得巨大的有效负载 (50+mb) 响应。 我们需要一种方法来拒绝如此巨大的反应。我在 Camel 中找不到支持此功能的内置功能。

此时,我正计划构建一个自定义节流器,因为我也在网络上搜索提供此功能的外部自定义 Camel 组件。

在重新发明轮子之前,我想如果有人已经遇到过这种情况并有一个可以与我分享的解决方案。

提前致谢。

【问题讨论】:

  • payload来自哪里(例如webservice、队列等)以及格式是什么(文本、xml、二进制?)
  • 响应最终可能以任何格式(如 json、xml、固定位置等)流经 http 或 mq。目前它来自soap 格式的响应者 Web 服务。

标签: apache-camel response throttling


【解决方案1】:

我认为,如果您使用处理器来简单地获取有效负载的大小并将其设置在属性上,那么您可以将其用作路由中的过滤器。

处理器:

int payloadSize = exchange.getIn().getBody(byte[].class).length;
exchange.getIn().setHeader("payloadSize", payloadSize)

然后在你的路线中:

.filter(header("payloadSize").isLessThan(50 * 1024 * 1024))

【讨论】:

  • 非常感谢史蒂夫,如果需要,我会尽力跟进
【解决方案2】:

如果启用流缓存,那么它有一个长度方法,您可以使用它来了解有效负载的大小,然后如果消息大于 X,则拒绝该消息。

注意限制器 EIP 模式不会拒绝消息,它只会减慢消息的速度。要拒绝消息,请使用基于内容的路由器、过滤器等。

您还可以查看使用拦截器并使用 from 并检查大小,然后如果它被拒绝设置一些错误代码/错误正文,然后停止路由。

【讨论】:

  • 非常感谢克劳斯,如果需要,我会尽力跟进。我们的需要是甚至不让消息进入我们基于 Camel 的应用程序,以减少服务器上的巨大负载。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-04
  • 2018-08-07
  • 1970-01-01
  • 1970-01-01
  • 2019-01-11
  • 1970-01-01
相关资源
最近更新 更多