windows環境下如何搭建Consul+Ocelot

来源:https://www.cnblogs.com/yuchenghao/archive/2019/07/06/11141524.html
-Advertisement-
Play Games

# <center>Consul+Ocelot的服務網關與註冊等功能的實現</center> 此文檔主要提供給開發人員使用, 暫時僅實現服務註冊、服務發現、負載均衡等功能, 更多功能需配合官方文檔或第三方文檔進行更細緻化開發。 ###`有興趣可以瞭解一下` * #### Consul相關: * [C ...


下麵的是markdown格式的文檔,懶得排版了,有興趣的話可以去github上看,有源碼

Github:https://github.com/yuchengao0721/Consul-Ocelot.git

# <center>Consul+Ocelot的服務網關與註冊等功能的實現</center>
此文檔主要提供給開發人員使用,
暫時僅實現服務註冊、服務發現、負載均衡等功能,
更多功能需配合官方文檔或第三方文檔進行更細緻化開發。

###`有興趣可以瞭解一下`

* #### Consul相關:

* [Consul官網](https://www.consul.io/)
* [Consul簡介](https://blog.51cto.com/firephoenix/2131616)
* [Consul使用手冊](https://blog.csdn.net/liuzhuchen/article/details/81913562)
* [Consul配置手冊](https://www.cnblogs.com/sunsky303/p/9209024.html)

* #### Ocelot相關:

* [Ocelot官網](https://ocelot.readthedocs.io/en/latest/)
* [Ocelot簡介](https://blog.csdn.net/qin_yu_2010/article/details/82323003)

## 1. Windows環境的搭建

在Windows環境下搭建consul進行服務註冊、服務網關等
此次環境配置:
Server
ip:192.168.199.203
Windows版本:WS 2012 R2 Standard
處理器:i5-4570
記憶體:8G
系統類型:X64
Client
ip:192.168.199.40
Windows版本:W10企業版
處理器:i7-3720QM
記憶體:8G
系統類型:X64

### 1.1 伺服器環境搭建

* #### 1.1.1 Consul_Server端
* ##### step1
前往Consul官網[下載](https://www.consul.io/downloads.html) windows版本的Consul安裝程式

* ##### step2
將下好的軟體複製到一個新建好的文件夾A,在文件夾A內部新建server.json文件,寫入內容
```javascript
{
"datacenter": "dc1",
"data_dir": "opt/consul/data",
"node_name": "consul-server01",//你的Consul服務的別名
"server": true,
"bootstrap_expect": 1,
"bind_addr": "192.168.199.203",//你伺服器的ip或者外網功能變數名稱
"client_addr": "0.0.0.1",//此處固定寫法,方便其他機器查看你的ConsulUI
"ui":true
}
```

* ##### step3
在文件夾A內部新建runconsul.bat文件,寫入內容
'''
consul agent -config-dir server.json
pause
'''

* ##### step4
運行runconsul.bat文件,出現下列內容即為開啟成功
![](WindowsServerStep4.jpg)
在伺服器上打開瀏覽器輸入127.0.0.1:8500,可以查看Consul運行情況,

 

* #### 1.1.2 Consul_Client端
* ##### step1
前往Consul官網[下載](https://www.consul.io/downloads.html) windows版本的Consul安裝程式

* ##### step2
將下好的軟體複製到一個新建好的文件夾A,在文件夾A內部新建server.json文件,寫入內容
```javascript
{
"datacenter": "dc1",
"data_dir": "opt/consul/data",
"node_name": "ych-Client",//你的Client的別名(僅支持全字母、數字、破折號)
"server": false,//是否是Server
"bind_addr": "192.168.199.40",//當前伺服器IP或者功能變數名稱
"client_addr": "192.168.199.40",//可以寫當前伺服器的ip,也可以寫0.0.0.0,主要區別是是否可以在本機查看UI
"ui":true,//是否開啟UI
"retry_join": ["192.168.199.203"],//重新加入的Server伺服器的IP,可為多個,直到成功
"retry_interval": "30s",//失敗重連間隔
"rejoin_after_leave": true,
"start_join":["192.168.199.203"]//第一次加入的Server伺服器的IP,可為多個,直到成功
}
```

* ##### step3
在文件夾A內部新建runconsul.bat文件,寫入內容
'''
consul agent -config-dir server.json
pause
'''

* ##### step4
運行runconsul.bat文件,出現下列內容即為開啟成功
![](WindowsClientStep4.jpg)
在server伺服器上打開瀏覽器輸入127.0.0.1:8500,可以查看Node加入新節點。

### 1.2 API註冊
* ##### step1
引入下列兩個Nuget包
```javascript
<PackageReference Include="Microsoft.AspNetCore.Http.Features" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
```

* ##### step2

添加公司Nuget上的ConsulRegister引用

在Program添加下列代碼:
```javascript
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIIS()
.UseStartup<Startup>();
```
在Startup添加下列代碼:
```javascript
public void ConfigureServices(IServiceCollection services)
{
services.AddConsul(Configuration);//註冊Consul中間件
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseCors();
app.UseHttpsRedirection();
app.UseConsul();//使用Consul中間件
app.UseMvc();
}
```
* ##### step3
在appsettings.json內添加下列內容
```javascript
"Host": "http://192.168.199.40:8041",//當前API的ip或者功能變數名稱
"ServiceDiscovery": {
"ServiceName": "API_1",//註冊的API名稱,用以進行服務查找,以及負載均衡
"Consul": {
"HttpEndpoint": "http://192.168.199.40:8500"//API需要註冊的Client地址(埠未固定8500,或者可映射為8500的埠)
}
}
```

* ##### step4
運行程式然後打開server的ConsulUI即可查看註冊了該API

 

### 1.3 Ocelot進行服務網關搭建和服務發現
這個程式建議部署在Consul-Server伺服器上

* ##### step1
新建一個webAPI core項目

引入下列兩個Nuget包
```javascript
<PackageReference Include="Ocelot" Version="13.5.2" />
<PackageReference Include="Ocelot.Provider.Consul" Version="13.5.2" />
```

 

* ##### step2(重要)
此處為配置項,暫時需要手動實現

根目錄下新建ocelot.json文件,寫入內容
```javascript
{
"ReRoutes": [
{
"UseServiceDiscovery": true,
"DownstreamPathTemplate": "/{url}",//下游路由規則
"DownstreamScheme": "http",//請求協議
"ServiceName": "API_1",//對應的服務名稱
"LoadBalancerOptions": {
"Type": "RoundRobin"//負載均衡規則:輪詢
},
"UpstreamPathTemplate": "/Client1/{url}",//上游路由規則不可重覆,否則上游無法定址到正確的下游路由
"UpstreamHttpMethod": [ "Get", "Post" ],//允許的請求方法
"ReRoutesCaseSensitive": false
},
{
"UseServiceDiscovery": true,
"DownstreamPathTemplate": "/{url}",
"DownstreamScheme": "http",
"ServiceName": "API_2",
"LoadBalancerOptions": {
"Type": "RoundRobin"
},
"UpstreamPathTemplate": "/Client2/{url}",
"UpstreamHttpMethod": [ "Get", "Post" ],
"ReRoutesCaseSensitive": false
}
],
"GlobalConfiguration": {
// 使用Consul服務治理
"ServiceDiscoveryProvider": {
"Host": "192.168.199.203",//想要發現的Server服務IP
"Port": 8500,//固定埠或者可映射到該埠的映射埠
"PollingInterval": 100, //健康檢查時間間隔ms
"Type": "Consul",
"Token": null,
"ConfigurationKey": null
}
}
}
```
在Program添加下列代碼:
```javascript
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
config
.SetBasePath(hostingContext.HostingEnvironment.ContentRootPath)
.AddJsonFile("appsettings.json", true, true)
.AddJsonFile($"appsettings.{hostingContext.HostingEnvironment.EnvironmentName}.json", true, true)
.AddJsonFile("ocelot.json")
.AddEnvironmentVariables();
})
.UseStartup<Startup>();
```
在Startup添加下列代碼:
```javascript
public void ConfigureServices(IServiceCollection services)
{
//添加Ocelot中間件
services.AddOcelot(
new ConfigurationBuilder()
.AddJsonFile("ocelot.json", optional: false, reloadOnChange: true).Build())
.AddConsul()
.AddConfigStoredInConsul();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
//添加程式健康啟動檢查
app.Map("/HealthCheck", s =>
{
s.Run(async context =>
{
await context.Response.WriteAsync("ok");
});
});
app.UseOcelot().Wait();//使用Ocelot中間件
}
```
* ##### step3
運行程式即可


### 1.3 小結
至此windows環境下的服務網關與服務發現雛形已經搭建好,
下麵是一些可能遇到的問題
####1.3.1 問題?S
#####Q:遇到伺服器積極拒絕怎麼解決?
A:檢查8500埠是否已經開放,[具體做法](https://jingyan.baidu.com/article/37bce2be40cf921002f3a229.html);如果埠以開放仍有問題,關閉防火牆。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、二叉樹回憶 上一篇我們對數據結構中常用的樹做了介紹,本篇博客主要以二叉樹為例,講解一下樹的數據結構和代碼實現。回顧二叉樹:二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作“左子樹”(left subtree)和“右子樹”(right subtree) 二、二叉樹比鏈表好在哪裡? 看看如下的 ...
  • 在編寫代碼時,我們應該有一些方法將程式像連接水管一樣連接起來 當我們需要獲取一些數據時,可以去通過"擰"其他的部分來達到目的。這也應該是IO應有的方式。 Doug McIlroy. October 11, 1964 為什麼應該使用stream? 在node中,I/O都是非同步的,所以在和硬碟以及網路的 ...
  • 數組去重 查找元素 數組降序 迭代數組 將map轉為數組 合併數組 合併map 判斷map中key是否存在 ...
  • 一、 URLconf配置 1. 基本格式 參數說明 正則表達式:一個正則表達式字元串 views視圖:一個可調用對象,通常為一個視圖函數 參數:可選的要傳遞給視圖函數的預設參數(字典形式) 別名:一個可選的name參數 2. django 2.0版本的路由系統 2.0版本中re_path和1.11版 ...
  • 基於Python+Unittest+Ddt+Senium+HTMLReport 框架結構: ...
  • [TOC] 題目 "戳" 思路 $bfs$ 第一遍提交$50$,第二遍就$100$了,qwq $Code$ cpp include include include include include using namespace std; int t,ca,cb,n,step,sum; int a_n ...
  • 在處理faster-rcnn和yolo時筆者使用labelimg標註圖片 但是我們只截取了大概800張左右的圖,這個量級在訓練時肯定是不夠的,所以我們需要使用數據增強(無非是旋轉加噪調量度)來增加我們的訓練樣本 這裡附上 視頻按幀率截取圖片的腳本代碼 https://www.cnblogs.com/ ...
  • 描述:將一個視頻流按幀數截取大量的圖片 用途:AI的數據集製作,得到大量的圖片,之後將其打標簽 更改的地方 1.default--間隔的幀數 2.input/output--輸入視頻的路徑、存放截取圖片的路徑 (將路徑放入後面的‘ ’中即可)前面加r可表示絕對路徑 eg: 直接上代碼 參考 http ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...