如何使用Spring Boot实施“负载均衡器”?

时间:2018-10-02 09:56:42

标签: java spring-mvc redirect proxy httprequest

取决于请求正文的内容,我需要将http请求重定向到URL_1URL_2

我开始执行控制器:

@RestController
public class RouteController {

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping(value = "/**")
    public HttpServletResponse route(HttpServletRequest request) {
        String body = IOUtils.toString(request.getReader());
        if(isFirstServer(body)) {
            //send request to URL_1 and get response
        } else {
            //send request to URL_2 and get response
        }
    }
}

请求可能是GETPOSTPUT等的PATCH

您能帮我写那个代码吗?

1 个答案:

答案 0 :(得分:0)

我前段时间曾问过一个类似的问题。请访问Server side redirect for REST call了解更多背景信息。

(以我目前的理解),最好的方法是从初始端点手动调用所需的端点。

@RestController
public class RouteController {

    @Value("${firstUrl}")
    private String firstUrl;

    @Value("${secondUrl}")
    private String secondUrl;

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping(value = "/**")
    public void route(HttpServletRequest request) {
        String body = IOUtils.toString(request.getReader());
        if(isFirstServer(body)) {
            restTemplate.exchange(firstUrl,
                                  getHttpMethod(request), 
                                  getHttpEntity(request), 
                                  getResponseClass(request), 
                                  getParams(params));
        } else {
            restTemplate.exchange(secondUrl,
                                  getHttpMethod(request), 
                                  getHttpEntity(request), 
                                  getResponseClass(request), 
                                  getParams(params))
        }
   }
}

getHttpMethod的示例实现:

public HttpMethod getHttpMethod(HttpServletRequest request) {
    return HttpMethod.valueOf(request.getMethod());
}

getHttpEntitygetResponseClassgetParams的类似实现。它们用于将数据从HttpServletRequest request转换为exchange方法所需的类型。

对于Spring MVC应用程序似乎有很多更好的方法,但是我想它不适用于您的上下文。

您可以实现此目标的另一种方法是定义自己的REST客户端并在其中添加路由逻辑。