WSO2 API-M租户API发布至外部商店后订阅无法调用求助
解决WSO2 API Manager 2.6.0租户间外部商店API调用失败问题
结合你描述的部署场景和错误日志,这个EPR服务找不到的问题核心原因大概率是外部商店配置未正确包含租户上下文,导致API发布和调用时无法定位到对应租户的服务。下面是具体的排查和解决步骤:
1. 修正外部商店的端点配置(关键步骤)
你当前配置的外部商店StoreURL和Endpoint都是默认租户的路径,但123.com是独立租户,其API Store的访问路径需要包含租户上下文。请修改配置为:
StoreURL: http://myhostapis.apis.com:9763/t/123.com/store ExternalAPIStore: id="123COM" type="wso2" className="org.wso2.carbon.apimgt.impl.publishers.WSO2APIPublisher" DisplayName: 123Com Endpoint: http://myhostapis.apis.com:9763/t/123.com/store Username: admin@123.com Password: xxxxxxxx
注意:WSO2 AM中租户的控制台/商店路径格式为
http://<host>:<port>/t/<tenant-domain>/<console-type>,缺失租户上下文会导致请求默认路由到主租户,自然找不到对应服务。
2. 验证外部商店的权限与连通性
- 用
admin@123.com账号直接访问http://myhostapis.apis.com:9763/t/123.com/store,确认能正常登录并操作123.com租户的API Store,排除账号权限或租户创建异常的问题。 - 检查abc.com租户的API Publisher在重新发布ApiTeste API到123COM外部商店时,是否有隐藏的报错(可查看
<AM_HOME>/repository/logs/wso2carbon.log),确保API成功同步到123.com租户的Store中。
3. 确认API订阅与网关路由配置
- 登录abc.com租户的API Store,重新订阅ApiTeste API(建议先取消原有订阅再重新操作),确保订阅流程生成正确的网关路由。
- 检查网关的Synapse配置文件路径:
<AM_HOME>/repository/deployment/server/synapse-configs/default/api/,找到对应ApiTeste的XML配置,确认其中的租户上下文(t/abc.com)和后端端点信息是否正确。
4. 正确构造API调用请求
调用API时,必须包含abc.com租户的上下文路径,示例格式如下:
http://myhostapis.apis.com:8280/t/abc.com/ApiTeste/<API版本号>/<资源路径>
缺失租户上下文会导致网关无法匹配到对应租户的API路由,进而触发超时或服务找不到的错误。
附:你提供的错误日志参考
TID: [-1] [] [2019-06-19 08:30:46,348] ERROR {org.apache.axis2.engine.AxisEngine} - The service cannot be found for the endpoint reference (EPR) {org.apache.axis2.engine.AxisEngine} org.apache.axis2.AxisFault: The service cannot be found for the endpoint reference (EPR) at org.apache.axis2.engine.DispatchPhase.validateTransport(DispatchPhase.java:251) at org.apache.axis2.engine.DispatchPhase.checkPostConditions(DispatchPhase.java:109) at org.apache.axis2.engine.Phase.invoke(Phase.java:329) at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:261) at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:167) at org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:263) at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) TID: [-1] [] [2019-06-19 08:30:46,350] ERROR {org.apache.synapse.transport.passthru.ClientWorker} - Fault processing response message through Axis2 {org.apache.synapse.transport.passthru.ClientWorker} org.apache.axis2.AxisFault: The service cannot be found for the endpoint reference (EPR) at org.apache.axis2.engine.DispatchPhase.validateTransport(DispatchPhase.java:251) at org.apache.axis2.engine.DispatchPhase.checkPostConditions(DispatchPhase.java:109) at org.apache.axis2.engine.Phase.invoke(Phase.java:329) at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:261) at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:167) at org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:263) at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) TID: [-1] [] [2019-06-19 08:30:54,343] INFO {org.apache.synapse.mediators.builtin.LogMediator} - STATUS = Executing default 'fault' sequence, ERROR_CODE = 101504, ERROR_MESSAGE = Send timeout {org.apache.synapse.mediators.builtin.LogMediator}
内容的提问来源于stack exchange,提问作者Gislaine Almeida
相关产品推荐
相关产品推荐

