有没有办法在ESB或API Manager上启用全局有效负载压缩(gzip)?

时间:2016-09-07 12:45:25

标签: wso2 wso2esb axis2

有没有办法在ESB(< 5.0.0)或API Manager(< 2.0.0)上切换有效负载压缩,特别是对于application / json内容类型?

我在资源层面实现了这一目标,但显然全局选择是理想的。

经过一些研究后,我在catalina-server.xml中找到了以下可用选项:

compression =“on”& compressableMimeType。

这没有用,因为tomcat服务于web2接口,而不是服务,这就是axis2的用途。

经过一番挖掘后,我找到了一篇存档的文章http://wso2.com/library/3316/。在里面它引用了以下内容:

“MC_GZIP_RESPONSE(Server,Writable):默认情况下,不会压缩HTTP响应正文。将此消息上下文属性设置为true,以使响应正文被GZIP压缩。”

听起来它正是我所需要的,但我不确定在何处设置此参数。

2 个答案:

答案 0 :(得分:3)

谢谢" ycr"。你让我走上了正确的道路。

我为实现这一目的所做的是为API管理器内部署的api创建全局自定义inSequence和outSequence(全局扩展),如https://docs.wso2.com/display/AM1100/Adding+Mediation+Extensions中所述。

inSequence检查请求的Accept-Encoding标头的值/是否存在,outSequence相应地gzips响应。

步骤:

创建" inSequence" handler xml文件:

<sequence xmlns="http://ws.apache.org/ns/synapse" name="WSO2AM--Ext--In">
<property name="encoding" expression="$trp:Accept-Encoding"/>
<filter xpath="fn:contains(fn:lower-case(get-property('encoding')) , 'gzip')">
    <then>
        <property name="compression" value="true"/>
    </then>
    <else>
        <property name="compression" value="false"/>
    </else>
</filter>

文件名可以是任何东西,但标签内的名称必须是WSO2AM - Ext - In

同样创建&#34; outSequence&#34;档案:

<sequence xmlns="http://ws.apache.org/ns/synapse" name="WSO2AM--Ext--Out">
<filter source="get-property('compression')" regex="true">
    <then>
        <property action="remove" name="TRANSPORT_HEADERS" scope="axis2"/>
        <property name="Content-Encoding" scope="transport" type="STRING" value="gzip"/>
        <property name="Transfer-Encoding" scope="transport" type="STRING" value="gzip"/>
    </then>
    <else>
        <property name="TRANSPORT_HEADERS" action="remove" scope="axis2"/>
    </else>
</filter>

复制/ repository / deployment / server / synapse-configs / default / sequences目录中的文件。它们将被热部署。

向任何已部署的api发送请求,并将头文件Accept-Encoding设置为gzip(其中包含gzip的任何字符串将被压缩),它应该使用Content-Encoding响应:gzip

答案 1 :(得分:1)

在Api Manager中您可以将此属性添加到velocity_template.xml,因此默认情况下会将其添加到正在创建的所有API中。