如何在 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 完整实施。
我应该使用 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 完整实施。