關於Ocelot 網關結合Consul實現服務轉發的坑爹問題


下面是我的網關配置來驗證下Ocelot的問題,如果只是做網關轉發應該還ok,但是要是結合Consul來檢查並健康的轉發有效服務器還是有很多弊端

關鍵在於通過設置 DeregisterCriticalServiceAfter來處理,那么這個值要夠大,如果在這個值內服務器web站點更新正常了就沒有問題,如果一直失敗就會注銷的掉這個服務不回去健康檢查了

下面用代碼來說明下:

 

{
  "ReRoutes": [
    {
      "DownstreamPathTemplate": "/api/Check/ocelot",
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "192.168.0.233",
          "Port": 20011
        },
        {
          "Host": "192.168.0.233",
          "Port": 20012
        },
        {
          "Host": "192.168.0.233",
          "Port": 30011
        }
      ],
      "UpstreamPathTemplate": "/testocelot",
      "UpstreamHttpMethod": [ "Get" ],
      "LoadBalancer": "LeastConnection",
      "ServiceName": "userservices",
      "UseServiceDiscovery": true

    }
  ],

  "GlobalConfiguration": {
    "BaseUrl": "http://192.168.0.233:20010",
    "ServiceDiscoveryProvider": {
      "Host": "192.168.0.233",
      "Port": 8500

    }

  }
}

網關都是結合consul服務的狀態,那么服務器web網站的consul服務沒有注冊,何來的健康轉發呢?

.NetCore 在 Configure中配置了 consul 服務注冊,但是 web網站都沒有運行起來 consul 服務就不存在 更不存在健康證狀態 

那么  利用 ServiceDiscoveryProvider 服務發現的方式來轉發 根本就會失敗

所以感覺還是坑~~~~

 

當web站點沒有訪問過的時候 Consul服務

訪問web站點

 所以 Consul 拿來做服務器健康檢查就行了 結合Ocelot實現LB還是有些牽強(至少第一次注冊服務需要訪問站點),如果能把注冊服務單獨出來不需要放在web站點中就行了

當然訪問之后就可以了

這里三個服務都在了不同的地址

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM