我有几个微服务与OpenFeign. 每个都是一个项目的子模块(称之为“父”),有自己的 docker 容器。
好的。因此,当我想使用feign.builder().target()方法构建客户端时,会发生错误,声称“目标值必须是绝对的”。我查看了源代码,它的意思是(feign.RequestTemplate.target(RequestTemplate.java:447)):
public static boolean isAbsolute(String uri) {
return uri != null && !uri.isEmpty() && uri.startsWith("http");
}
Run Code Online (Sandbox Code Playgroud)
问题来了:其他服务的网址如下:
another-service:8080/check
Run Code Online (Sandbox Code Playgroud)
在本地测试中,这不是问题,因为配置文件local有http://localhost:8080等等。但是在端到端测试中,这无法绕过绝对检查。
那么,现在该怎么办?
我只是http://在服务名称之前添加了,这是固定的。
看起来在创建需要相互通信的容器时,docker 做了两件事:
172.26.0.2,而不是 aslocalhost或192.168.xx.xx。docker-compose.yml. 就像,在docker-compose.yml我有service-A,在docker网络中,我可以docker exec -it bash运行shell并curl http://service-A:8080访问它。请注意,我使用了内部端口,而不是“外部”端口。例如,如果 service-A 具有如下端口配置:
ports:
- "8083:8080"
Run Code Online (Sandbox Code Playgroud)
在网络内部(curl来自其他容器)我们使用 8080,但在“外部”(来自主机,使用 Postman)我们使用 8083。
PS:
我曾经uname -a检查容器的 dist 是 Debian,然后我apt update && apt install curl安装curl可执行文件。
| 归档时间: |
|
| 查看次数: |
5455 次 |
| 最近记录: |