【问题标题】:wso2 - handlers and sequencewso2 - 处理程序和序列
【发布时间】:2016-05-17 04:06:43
【问题描述】:

对于WSO2 api manager,handlers和sequence有什么区别或关系。

我想为每个 api 设置一些条件。根据条件,它将检查 api 请求是否通过条件。我不确定是否需要使用序列或处理程序。

【问题讨论】:

    标签: wso2 wso2-am


    【解决方案1】:

    此答案假定用户通过“序列”表示“中介序列”,它们通过 APIManagerExtensionHandler 处理程序运行(中介可以是全局的或每个 API,但据我所知,它是在同一个地方执行的)。

    中介序列和处理程序都是在网关收到响应或请求后运行的代码扩展。处理程序扩展org.apache.synapse.rest.AbstractHandler类,需要实现AbstractHandler.handleRequestAbstractHandler.handleResponse;中介扩展org.apache.synapse.mediators.AbstractMediator 类并要求实现AbstractMediator.mediate

    自定义处理程序和中介序列之间的主要区别在于,使用自定义处理程序需要您编写自己的 Java 类,然后打包和部署处理程序。如果您的需求可以通过预定义的中介(由 WSO2 的 ESB 提供)的组合来满足,那么您可以编写一个 XML 序列来定义中介任务,而无需新代码。

    根据我的经验,以下是处理程序和中介序列之间的主要区别。应根据您的具体要求确定使用其中一种。

    处理程序

    • 严格来说是“每个 API”,但可以通过包含在 velocity-template.xml 文件中的方式将它们添加到每个 API。
    • 可以相对于其他处理程序以任何顺序执行。
    • 除了在 API 定义序列中包含处理程序之外,不需要序列。所有任务都必须包含在 Java 代码中。

    中介序列

    • 可以配置为全局或 API 特定。
    • 可以相对于其他中介序列以任何顺序执行,但不能在其他处理程序之前进行中介,除非所有其他中介也这样做(除非您编写自定义中介处理程序)。
    • 允许您调用 XML 树中的其他预定义调解器来描述调解任务。除非预定义的中介(由 WSO2 的 ESB 提供)不能满足您的要求,否则您不必编写任何自定义代码。

    简而言之:如果现有调解器的某种组合可以实现您的目标,那么使用调解序列最有意义(即使是“接近但不完全”的情况,编写自定义调解器比完全创建调解器更容易新的处理程序)。如果您需要更高级别的自定义或需要在执行所有其他中介之前或之后进行中介,您应该考虑编写一个处理程序。

    编辑:实际回答具体问题:您可以使用中介序列相当容易地对请求标头中的值进行逻辑检查。如果您需要阅读正文内容,这些检查会变得更加困难......在这种情况下,自定义处理程序基本上是您唯一的选择。

    【讨论】:

      猜你喜欢
      • 2019-07-04
      • 1970-01-01
      • 2019-04-28
      • 2022-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多