Spring MVC 使用 Spring Cloud Eureka 重定向
Spring MVC Redirects with Spring Cloud Eureka
当使用 Spring MVC 和 Spring Cloud Eureka 时,我怎样才能让 Spring MVC 像 RestTemplate 那样解析我的重定向 URL?
例如,如果我有两个服务,user-service 和 movie-service 都注册了 Spring Cloud Eureka,我怎样才能让 user-service 中的控制器重定向到 movie-服务端点,无需硬编码 url?
@Controller
public class UserServiceController {
@PostMapping("/something")
public String performSomeAction() {
// I'd like movie service to be resolved to an instance that is registered with Eureka
return "redirect:http://movie-service/some-url
}
}
我想做的事情可行吗?我知道 Spring 云通常与 API 一起使用,但对我来说,将您的 Web 应用程序与它集成似乎也很有意义。
@Controller
public class UserServiceController {
@Autowired
LoadBalancerClient loadBalancerClient;
@PostMapping("/something")
public String performSomeAction() {
ServiceInstance serviceInstance = loadBalancerClient.choose("movie-service");
if (serviceInstance != null) {
return "redirect:http://"+ serviceInstance.getHost() + ":" + serviceInstance.getPort() +"/some-url
}
// throw an error or something else
}
}
当使用 Spring MVC 和 Spring Cloud Eureka 时,我怎样才能让 Spring MVC 像 RestTemplate 那样解析我的重定向 URL?
例如,如果我有两个服务,user-service 和 movie-service 都注册了 Spring Cloud Eureka,我怎样才能让 user-service 中的控制器重定向到 movie-服务端点,无需硬编码 url?
@Controller
public class UserServiceController {
@PostMapping("/something")
public String performSomeAction() {
// I'd like movie service to be resolved to an instance that is registered with Eureka
return "redirect:http://movie-service/some-url
}
}
我想做的事情可行吗?我知道 Spring 云通常与 API 一起使用,但对我来说,将您的 Web 应用程序与它集成似乎也很有意义。
@Controller
public class UserServiceController {
@Autowired
LoadBalancerClient loadBalancerClient;
@PostMapping("/something")
public String performSomeAction() {
ServiceInstance serviceInstance = loadBalancerClient.choose("movie-service");
if (serviceInstance != null) {
return "redirect:http://"+ serviceInstance.getHost() + ":" + serviceInstance.getPort() +"/some-url
}
// throw an error or something else
}
}