如何在 Spring 引导中将 REST 服务(容器内)连接在一起?

How do I connect REST services (inside containers) together, in Spring Boot?

我应该使用 docker compose 构建一个包含单独 REST 服务的系统。其中之一是用户可以登录的 Web 应用程序,其中之一是身份验证服务,因此我需要使用 post 请求连接到其余身份验证服务,并获得确认。

这是我的身份验证服务:

@RestController
public class AuthenticationController {
    private final List<User> users=GetUsers();

    @PostMapping ("/verify")
    public String greeting(@RequestParam String username, @RequestParam String password) {
        for (User u :users)
            if (u.getUsername().equals(username)&&u.getPassword().equals(password))
                return u.getRole();
        return "Invalid Credentials ";

    }
} 

那么,我究竟如何从 Web 应用程序代码内部连接到此服务并发送 post 请求?

我知道我可以使用这个发送 get:

String uri = "http://localhost:8080/verify";

RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.getForObject(uri, String.class);

如何发送 post?它如何在容器内工作?我知道我可以 link 它们在 docker 内组合在一起,但我如何在代码级别上做到这一点?我是否将 localhost:8080 替换为 containerName:exposedPort

如您所知,Docker 容器是单独的 Linux 虚拟机,这意味着 Docker 容器内的 localhost 是指容器本身,不是主持人.

Docker compose 有一个名为 DNS 解析 的功能,这基本上意味着您可以通过容器名称或容器哈希 ID 调用其他服务。

所以在您的网络应用程序中,您可以通过 containerName:containerPort 而不是本地主机来调用 API。

有关详细信息,请查看 this 完整实施。