欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

SpringCloud開(kāi)發(fā)人員怎么解決服務(wù)沖突和實(shí)例亂竄

小編給大家分享一下Spring Cloud開(kāi)發(fā)人員怎么解決服務(wù)沖突和實(shí)例亂竄,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

為立山等地區(qū)用戶(hù)提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及立山網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設(shè)公司、立山網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶(hù)提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶(hù)的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

一、背景

在這一篇文章《Spring Cloud開(kāi)發(fā)人員解決服務(wù)沖突和實(shí)例亂竄的示例分析》中提到使用服務(wù)的元數(shù)據(jù)來(lái)實(shí)現(xiàn)隔離和路由,有朋友問(wèn)到能不能直接通過(guò)IP來(lái)實(shí)現(xiàn)?本文就和大家一起來(lái)討論一下這個(gè)問(wèn)題

二、可行性分析

要實(shí)現(xiàn)通過(guò)IP來(lái)隔離和路由的話(huà)有一個(gè)非常關(guān)鍵的點(diǎn)需要解決,就是怎樣實(shí)現(xiàn)IP可辨識(shí),意思就是如何區(qū)分那個(gè)IP服務(wù)器上的,那個(gè)IP開(kāi)發(fā)人員本機(jī)

Spring Cloud開(kāi)發(fā)人員怎么解決服務(wù)沖突和實(shí)例亂竄

如上圖所示其實(shí)我們還是能找到規(guī)律可以辨識(shí)的,所以這個(gè)是可以行的!

  • 開(kāi)發(fā)人員本機(jī)IP- 其實(shí)就是客戶(hù)端IP,也就是原始請(qǐng)求方的IP172.16.20.2

  • 服務(wù)器IP- 可以理解為服務(wù)器上的服務(wù)所在機(jī)器的IP(有點(diǎn)繞):172.16.20.1

三、路由規(guī)則邏輯

主要實(shí)現(xiàn)以下目標(biāo):

  1. 普通用戶(hù)訪(fǎng)問(wèn)服務(wù)器上的頁(yè)面時(shí),請(qǐng)求的所有路由只調(diào)用服務(wù)器上的實(shí)例

  2. 開(kāi)發(fā)A訪(fǎng)問(wèn)時(shí),請(qǐng)求的所有路由優(yōu)先調(diào)用開(kāi)發(fā)A本機(jī)啟動(dòng)的實(shí)例,如果沒(méi)有則調(diào)用服務(wù)器上的實(shí)例

  3. 開(kāi)發(fā)B訪(fǎng)問(wèn)時(shí)同上,請(qǐng)求的所有路由優(yōu)先調(diào)用開(kāi)發(fā)B本機(jī)啟動(dòng)的實(shí)例,如果沒(méi)有則調(diào)用服務(wù)器上的實(shí)例

在找到IP的辨識(shí)規(guī)律后,推導(dǎo)出下面3個(gè)路由規(guī)則來(lái)實(shí)現(xiàn)上面的目標(biāo)

  1. 優(yōu)先匹配原始請(qǐng)求方的IP的服務(wù)實(shí)例

  2. 再者匹配上游服務(wù)所在機(jī)器IP的服務(wù)實(shí)例

  3. 上面2個(gè)邏輯都匹配不到的話(huà)使用輪詢(xún)的方式找一個(gè)實(shí)例

  具體的自定義負(fù)載均衡的對(duì)象怎么寫(xiě)我這里就不詳細(xì)描述了,可以參考我上一篇文章《Spring Cloud開(kāi)發(fā)人員解決服務(wù)沖突和實(shí)例亂竄的示例分析》

四、獲取原始請(qǐng)求方的IP

獲取原IP的代碼片段如下,只需要在網(wǎng)關(guān)上增加一個(gè)過(guò)濾器獲取IP,然后添加到header里面一直傳遞下去就可以了

/**
 * 獲取Ip地址
 */
private String getIpAddr(HttpServletRequest request){
    String ip = request.getHeader("X-Forwarded-For");
    if (isEmptyIP(ip)) {
        ip = request.getHeader("Proxy-Client-IP");
        if (isEmptyIP(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
            if (isEmptyIP(ip)) {
                ip = request.getHeader("HTTP_CLIENT_IP");
                if (isEmptyIP(ip)) {
                    ip = request.getHeader("HTTP_X_FORWARDED_FOR");
                    if (isEmptyIP(ip)) {
                        ip = request.getRemoteAddr();
                        if ("127.0.0.1".equals(ip) || "0:0:0:0:0:0:0:1".equals(ip)) {
                            // 根據(jù)網(wǎng)卡取本機(jī)配置的IP
                            try {
                                ip = InetAddress.getLocalHost().getHostAddress();
                            } catch (UnknownHostException e) {
                                log.error("InetAddress.getLocalHost()-error", e);
                            }
                        }
                    }
                }
            }
        }
    } else if (ip.length() > 15) {
        String[] ips = ip.split(",");
        for (int index = 0; index < ips.length; index++) {
            String strIp = ips[index];
            if (!isEmptyIP(ip)) {
                ip = strIp;
                break;
            }
        }
    }
    return ip;
}

private boolean isEmptyIP(String ip) {
    if (StrUtil.isEmpty(ip) || UNKNOWN_STR.equalsIgnoreCase(ip)) {
        return true;
    }
    return false;
}

把原IP添加到headerHTTP_X_FORWARDED_FOR里面?zhèn)鬟f給下游服務(wù)

RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
String sourceIp = getIpAddr(request);
ctx.getZuulRequestHeaders().put("HTTP_X_FORWARDED_FOR", sourceIp);

五、獲取服務(wù)器所在機(jī)器的IP

直接使用JDK自帶的InetAddress就可以了

String localIp = InetAddress.getLocalHost().getHostAddress()

以上是“Spring Cloud開(kāi)發(fā)人員怎么解決服務(wù)沖突和實(shí)例亂竄”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

當(dāng)前題目:SpringCloud開(kāi)發(fā)人員怎么解決服務(wù)沖突和實(shí)例亂竄
文章鏈接:http://chinadenli.net/article26/jdjhcg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作網(wǎng)站制作、網(wǎng)站排名網(wǎng)站內(nèi)鏈、云服務(wù)器微信公眾號(hào)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化