如何在Mule API网关中单独设置策略顺序?

时间:2016-12-01 14:04:11

标签: mule

我找到了很多关于如何设置使用API​​ Manager将策略应用于代理的顺序的文档,但没有关于如何在仅使用API​​网关独立时更改它的文档。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

有一种更确定的方法可以确定应用哪种订单策略,而不是取决于文件系统上文件的顺序。

如果您使用在线策略(即在API Manager端定义的策略),则必须在那里定义订单。如果重命名在线策略,它将在下一个轮询周期中被运行时删除。

如果您正在使用脱机策略(即未在API Manager端定义的策略,并且您必须手动部署到policies文件夹),那么您可以通过定义<来定义应用它们的顺序。 策略标记中的em> order 属性。例如:

    <?xml version="1.0" encoding="UTF-8"?>
    <policy 
      xmlns="http://www.mulesoft.org/schema/mule/policy" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns:mule="http://www.mulesoft.org/schema/mule/core"
      xmlns:api-platform-gw="http://www.mulesoft.org/schema/mule/api-platform-gw" 
      xsi:schemaLocation="http://www.mulesoft.org/schema/mule/policy http://www.mulesoft.org/schema/mule/policy/current/mule-policy.xsd      
          http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
          http://www.mulesoft.org/schema/mule/api-platform-gw http://www.mulesoft.org/schema/mule/api-platform-gw/current/mule-api-platform-gw.xsd" 
      online="false" 
      id="12345" 
      policyName="SimpleLogger"
      order="100">

      <before>
        <mule:logger level="INFO" message="A message" />
      </before>

      <pointcut>
            <api-platform-gw:api-pointcut apiName="your API name" apiVersion="your API version Name"/>
        </pointcut>
    </policy>

考虑到即使您定义了订单,CORS和Throttling / RateLimit策略也始终始终,无论这些策略或其他策略中指定的顺序如何。

如果两个或多个策略具有相同的顺序,则运行时将决定在应用定义了较低订单号的所有策略后应用的顺序。

在应用了指定顺序的所有策略之后,将应用未指定订单的策略。

祝你好运,     纳乌艾尔乌。

答案 1 :(得分:0)

我能够更改重构策略文件名称的策略顺序,并添加一个数字作为前缀。该号码将用于设置订单。

实施例

public class clsPais {

private long id = 0;
private String nombre = "";

    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public String getNombre() {
        return nombre;
    }
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
@Override
    public String toString() {
        return nombre;
    }

}

这些政策将按照

的顺序执行
clsPais p1 = new clsPais();
p1.setId(1);
p1.setNombre("ARGENTINA");

clsPais p2 = new clsPais();
p2.setId(2);
p2.setNombre("BRASIL");

cmbPaises.removeAllItems();
cmbPaises.addItem(p1);