網(wǎng)站首頁 編程語言 正文
先思考一些問題:它是做什么的、以及怎么使用它。帶著這些問題往下走。
consul是做什么的
consul用于微服務(wù)下的服務(wù)治理。服務(wù)治理是什么?它包含但不限于:服務(wù)發(fā)現(xiàn)、服務(wù)配置、健康檢查、鍵值存儲、安全服務(wù)通信、多數(shù)據(jù)中心等。
為什么需要服務(wù)治理?舉個例子:最開始的服務(wù)比較簡單,各服務(wù)之間通過API就能訪問。后面業(yè)務(wù)復(fù)雜了,服務(wù)也跟著復(fù)雜了,搞分布式了,而分布式又必然是多服務(wù)器部署,這就有一個問題:如果服務(wù)之間還是用API訪問,那某個服務(wù)所在的服務(wù)器掛掉以后這個服務(wù)就不能用了,也不能自動轉(zhuǎn)移,那么只能人肉運(yùn)維了。這時候大家在想:如果下游調(diào)用上游,只需要一個統(tǒng)一的地址,不用關(guān)注負(fù)載均衡、節(jié)點(diǎn)失效之類的問題,也不用關(guān)注可用性,這些都有一個中間件來完成,那該有多好。這個中間件要做的事情,就是服務(wù)治理,也就是本文的consul,它就是解決這個事的。但其實(shí)也不是只有它能做這個事,zooKeeper、etcd也能做這個事,也沒有什么高下之分,用什么主要看自己,看公司。對自己來說,哪個摸得透、玩的熟就用哪個。對公司來說,哪個市場認(rèn)可度高就用哪個,說白了就是哪個用的人多。用的人多會的人就多,招人換人速度就快了,互聯(lián)網(wǎng)企業(yè)追求的不就是速度么?“時間就是金錢,效率就是生命”,這句話早期在深圳隨處可見,至今仍然適用。
題外話有點(diǎn)多,接著往下走。
怎么使用consul
這里只講docker內(nèi)的consul。首先下載一個鏡像:
dokcer pull consul
然后運(yùn)行起來:
docker run -itd -p 8700:8500 --name myconsuldemo consul
成功運(yùn)行后能看到如下頁面:
tips:consul的默認(rèn)端口是8500,docker啟動可以映射到任意端口。
服務(wù)注冊
服務(wù)發(fā)現(xiàn)的概念,簡單來說就是所有節(jié)點(diǎn)程序啟動時都去consul注冊一下,注冊后的信息統(tǒng)一保存在consul中以供調(diào)用。是不是很簡單?
現(xiàn)在net core 3.1下完成consul服務(wù)注冊。
首先需要添加nuget包:
然后自行封裝一個注冊服務(wù),節(jié)省時間先上源碼:
public static void Reg(IConfiguration configuration) { string ip = configuration.GetSection("ip").Value.ToString(); string port = configuration.GetSection("port").Value.ToString(); string weight = configuration.GetSection("weight").Value.ToString(); string address = configuration.GetSection("address").Value.ToString();//consul的啟動地址 string center = configuration.GetSection("center").Value.ToString();//數(shù)據(jù)中心名稱 ConsulClient client = new ConsulClient(x => { x.Address = new Uri(address); x.Datacenter = center; }); client.Agent.ServiceRegister(new AgentServiceRegistration() { ID = $"server {ip}:{port}", Name = "shenzhen-ma",//分組名稱 Address = ip, Port = int.Parse(port) }); }
配置文件:
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*", "ip": "127.0.0.1", "port": 5100, "weight": 1,//權(quán)重,負(fù)載均衡的重要參數(shù) "address": "http://127.0.0.1:8700",//consul地址 "center": "dc1"http://數(shù)據(jù)中心 }
最后,這個服務(wù)需要在程序啟動的時候調(diào)用,只一次就好。直接把調(diào)用放在startup里就好,這樣程序啟動的時候就會自動注冊一個服務(wù)。
為了能夠動態(tài)修改配置文件,接下來通過控制臺啟動程序:
dotnet run --urls="http://*:5000" --ip="127.0.0.1" --port=5000
啟動成功以后,轉(zhuǎn)到consul的ui看一下:
能看到多了一個分組【shenzhen-ma】,點(diǎn)進(jìn)去看下我們的服務(wù):
127.0.0.1:5000,沒毛病。這時候模擬一下多節(jié)點(diǎn),再多啟動兩個程序試試看:
5001,5002也自動注冊進(jìn)入了這個分組。
原文鏈接:https://www.cnblogs.com/muchengqingxin/p/15007491.html
相關(guān)推薦
- 2022-05-26 C++?棧和隊(duì)列的實(shí)現(xiàn)超詳細(xì)解析_C 語言
- 2022-10-17 Go?WaitGroup及Cond底層實(shí)現(xiàn)原理_Golang
- 2022-04-20 Mac中pyenv的安裝與使用教程_python
- 2023-02-05 不同的編程語言輸出?“Hello?World”?代碼_其它綜合
- 2022-05-13 初識C++ 引用&內(nèi)聯(lián)函數(shù)
- 2022-11-02 Android?Studio模擬器運(yùn)行apk文件_Android
- 2022-01-21 scala中泛型,協(xié)變和逆變
- 2022-01-26 maatwebsite/Excel 導(dǎo)入 iconv (): Detected an illegal
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支