我正在开发一个 Spring 微服务应用程序。我的应用程序使用 api 网关、zuul 代理、spring web 并部署在 openshift 上。
我的 application.properties 文件中有以下配置:
zuul.routes.service-name.path=/test/aos/v1/**
zuul.routes.service-name.stripPrefix=false
zuul.routes.service-name.serviceId=service-name
点击 api @ https://URL.com/test/aos/v1/info 时出现以下错误:
{
"timestamp": "2021-06-20T23:34:36.862+0000",
"status": 404,
"error": "Not Found",
"message": "Not Found",
"path": "/info"
}
我通过转到 actuator/mappings
检查了 zuul 是否无法注册,并且此映射显示在那里。所以那里一切都很好。
另外,如果我直接在 OCP 中调用后端 API 容器 @ https://CONTAINER_URL.com/test/aos/v1/info 那么我会得到预期的结果。
所以我理解 zuul 无法找到后端 api 容器的 url。为什么会这样?该应用不使用 netflix eureka,而是完全依赖于 openshift 注册表。
我无法站在这个虫子的立场上站起来......内部尖叫
答案 0 :(得分:1)
需要根据配置的serviceId(名为“service-name”)访问需要访问的目标服务的服务器列表或 URL 映射
与其他设置一起添加以下内容 -
service-name.ribbon.NIWSServerListClassName=com.netflix.loadbalancer.ConfigurationBasedServerList
service-name.ribbon.listOfServers= https://example1.com,http://example2.com
或删除 serviceId 配置并将容器的 URL 添加为 -
zuul.routes.service-name.url=https://example.com/