wso2 esb" api not found"当汽车与其他人一起分配时

时间:2016-03-10 20:03:46

标签: wso2 wso2esb

我们在WSO2 ESB上有一组REST API。如果我们的.car是唯一部署的,我们的API会按预期响应。但是,我们与多个团队共享一个分区。当我们将.car文件与其他.car文件一起部署时,无论是在本地还是在云上,我们的API似乎都没有部署。任何对他们的调用都会引发一个未找到的API" 404.

我们这两天都有多套眼睛,但到目前为止还没有骰子。在发布此问题之前我们尝试了什么:

  1. 检查Jenkins日志以确保构建正常
  2. 检查Splunk中的服务器日志以确保部署成功
  3. 仔细检查以确保端点正确
  4. 确保网址中没有拼写错误
  5. 从工件xml文件中删除了注释
  6. 执行干净的构建并安装,以防万一
  7. 从分区下载所有.car文件并将它们安装在开发人员的计算机上,然后在localhost上运行它们。只要所有的.car文件都存在,我们就可以重现这个问题,但是当我们自己运行.car时,问题就消失了,而且API运行良好。
  8. 有没有人见过这个?如果是这样,决议是什么?

1 个答案:

答案 0 :(得分:1)

我们了解到WSO2 ESB中有一个怪癖如下:

如果另一个Synapse API配置文件的上下文与Synapse API配置上下文的一部分匹配,则WSO2 ESB可能找不到您的API。行为似乎不一致,但确实发生了。

例如,假设这两个Synapse API上下文都存在于同一个分区中:

<api xmlns="http://ws.apache.org/ns/synapse" name="API_THEIRS" context="/foo/bar/">

<api xmlns="http://ws.apache.org/ns/synapse" name="API_MINE" context="/foo/bar/bat">

在这种情况下,ESB可能永远不会找到API_MINE中定义的API,因为当请求进入&#34; / foo / bar / {anything}&#34;它将在API_THEIRS中查找匹配的资源。如果资源不在那里,ESB会抛出一个未找到的API&#34;错误。

这就是发生在我们身上的事。其中一个团队的上下文路径与我们路径中的前几个步骤相匹配,因此ESB在那里寻找我们的资源。