Apache camel ApacheCamel中基于响应负载大小的拒绝节流

Apache camel ApacheCamel中基于响应负载大小的拒绝节流,apache-camel,response,throttling,Apache Camel,Response,Throttling,我有一个要求,我们基于Camel的应用程序也可以获得巨大的有效负载(50+mb)响应。 我们需要一种方法来拒绝如此巨大的反应。我在Camel中找不到支持此功能的内置功能 在这一点上,我计划构建一个自定义节流器,因为我已经在web中搜索了提供此功能的外部自定义Camel组件 在重新发明轮子之前,我想如果有人已经遇到了这种情况,并且已经有了一个可以与我分享的解决方案 提前感谢。我认为如果您使用处理器只需获取有效负载的大小并将其设置在属性上,那么您就可以在路由中将其用作过滤器 处理器: int pay

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

在这一点上,我计划构建一个自定义节流器,因为我已经在web中搜索了提供此功能的外部自定义Camel组件

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


提前感谢。

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

处理器:

int payloadSize = exchange.getIn().getBody(byte[].class).length;
exchange.getIn().setHeader("payloadSize", payloadSize)
然后在你的路线上:

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

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

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

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


有效负载来自何处(如web服务、队列等)以及响应的格式(文本、xml、二进制?)最终可能以任何格式(如json、xml、固定位置等)通过http或mq。目前,其来自soap格式的响应者web服务。非常感谢Steve,如果需要,我将尝试跟进,如有需要,我会尽力跟进。我们需要的是,为了减少服务器上的巨大有效负载,我们甚至不让消息进入基于Camel的应用程序。