[英]How to implement “load balancer” using spring boot?
根據請求正文的內容,我需要將http請求重定向到URL_1
或URL_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
}
}
}
請求可能是GET
或POST
OT PUT
或PATCH
等。
您能幫我寫那個代碼嗎?
我前段時間曾問過一個類似的問題。 請參閱服務器端重定向以進行REST調用以獲得更多上下文。
(據我目前的理解),最好的方法是從初始端點手動調用所需的端點。
@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());
}
getHttpEntity
, getResponseClass
和getParams
類似實現。 它們用於將數據從HttpServletRequest request
轉換為exchange
方法所需的類型。
對於Spring MVC應用程序似乎有很多更好的方法,但是我想這不適用於您的上下文。
您可以實現此目標的另一種方法是定義自己的REST客戶端並在其中添加路由邏輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.