日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本文介紹了ZUUL代理-如何根據請求路徑將請求轉發到服務的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

問題

如何在Spring Cloud應用中轉發請求?我需要根據URI的部分將請求轉發到其他服務。

例如

HTTP GET http://user-application/api/users,返回用戶JSON。

HTTP GET http://user-application/api/proxy/jobs-application/api/jobs,返回作業JSON,但此請求應轉發到另一個應用程序:
HTTP GET http://jobs-application/api/jobs

不僅是GET,還可以使用任何HTTP方法。

上下文

我有一個SpringBoot應用程序用戶應用程序,它具有返回數據的REST終結點。

例如GET http://user-application/api/users將以JSON格式返回用戶。

用戶應用程序也有一個應將請求轉發到其他應用程序的HTTP終結點–我們將其中一個應用程序稱為作業應用程序

作為示例,該端點是,
GET http://user-application/api/proxy/jobs-application/api/jobs

請注意,初始請求發送到用戶應用程序,然后轉發到作業應用程序

接近

我提出了一些我思考的方法。也許你以前做過類似的事情,所以你可以分享你這樣做的經驗。或者甚至改進我的方法之一。

代理控制器方法

我將在用戶應用程序中使用映射/proxy

創建ProxyController

@Controller
@RequestMaping("/proxy/**")
ProxyController

public void proxy(final HttpServletRequest request, HttpResponse response) {
    final String requestUri = request.getRequestUri();
    if (!requestUri.startsWith("/api/proxy/")) {
        return null; // Do not proxy
    }

    final int proxyIndex = "/api/proxy/".lenght(); // Can be made a constant
    final String proxiedUrl = requestUri.subString(proxyIndex, requestUri.lenght());

    final Optional<String> payload = retrievePayload(request);
    final Headers headers = retrieveHeaders(request);

    final HttpRequest proxyRequest = buildProxyRequest(request, headers);
    payload.ifPresent(proxyRequest::setPayload);
    final HttpResponse proxyResponse = httpClient.execute(proxyRequest)
    pdateResponse(response, proxyResponse);
}

這種方法的問題是,我必須編寫大量代碼來構建代理請求,以檢查它是否有有效負載,如果有,將其復制到代理請求中,然后將標頭、Cookie等復制到代理請求中,將HTTP謂詞復制到代理請求中。然后,當我收到代理響應時,我必須將其詳細信息填充到響應中。

Zuul方法

我受到ZuulFilters的啟發:

https://www.baeldung.com/spring-rest-with-zuul-proxy
https://stackoverflow.com/a/47856576/4587961

@Component
public class ProxyFilter extends ZuulFilter {

    private static final String PROXY_PART = "/api/proxy";
    private static final int PART_LENGTH = PROXY_PART.length();

    @Autowired
    public ProxyFilter() {
    }

    @Override
    public boolean shouldFilter() {
        final RequestContext context = RequestContext.getCurrentContext();
        final String requestURI = retrieveRequestUri(context);
        return requestURI.startsWith(PROXY_PART);
    }

    @Override
    public Object run() {
        final RequestContext context = RequestContext.getCurrentContext();
        final String requestURI = retrieveRequestUri(context);
        final String forwardUri = requestURI.substring(PART_LENGTH);
        context.setRouteHost(buildUrl(forwardUri));

        return null;
    }

    @Override
    public String filterType() {
        return "proxy";
    }

    @Override
    public int filterOrder() {
        return 0;
    }

    private String retrieveRequestUri(final RequestContext context) {
        final HttpServletRequest request = context.getRequest();
        return request.getRequestURI();
    }

    private URL buildUrl(final String uri) {
        try {
            return new URL(uri);
        } catch (MalformedURLException e) {
            throw new RuntimeException(String.format("Failed to forward request uri %s}.", uri), e);
        }
    }
}

這段代碼使我可以更輕松地轉發請求。然而,我們也在Spring Cloud Zuul中使用了客戶端負載均衡器Ribbon和斷路器hystrix。如何啟用這些功能?是否將在context.setRouteHost(forwardUrl);中啟用它們

推薦答案

我想添加另一種方法,或許它也可以工作。

用于配置Zuul代理方法的靜態應用程序.yml文件

此方法不需要動態ZUUL篩選器。

Application.yml

zuul:
  routes:
    user-application:
      path: /api/users/**
      serviceId: user-service
      stripPrefix: false
      sensitiveHeaders:

    #  I have to define all other services similarly.

    jobs-application:
      path: /api/proxy/jobs/**
      serviceId: jobs-application
      stripPrefix: true
      sensitiveHeaders:

僅當我在部署用戶應用程序之前知道我的客戶端需要調用的所有服務時,它才會起作用。如果動態添加新的應用程序,該怎么辦?然后我必須更新配置。

這篇關于ZUUL代理-如何根據請求路徑將請求轉發到服務的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,

分享到:
標簽:ZUUL 代理 服務 請求 路徑 轉發
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定