首页 > 解决方案 > Spring MVC 重定向与 Spring Cloud Eureka

问题描述

使用 Spring MVC 和 Spring Cloud Eureka 时,如何让 Spring MVC 像 RestTemplate 一样解析我的重定向 URL?

例如,如果我有两个服务,用户服务和电影服务,它们都注册到 Spring Cloud Eureka,我怎样才能让用户服务中的控制器重定向到电影服务端点,而不用硬编码 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 Cloud 通常与 API 一起使用,但对我来说,能够将您的 Web 应用程序与之集成似乎也很有意义。

标签: springmicroservicesspring-cloudspring-cloud-netflix

解决方案


@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
    }
}

推荐阅读