應用場景: 多台伺服器提供同乙個服務
是儲存服務名稱與ip和埠對應關係的伺服器
服務只會註冊ip,埠這些資訊,至於服務提供什麼介面,consul不管,需要消費者知道這些細節.
安裝執行
consul agent -dev監控頁面
新建2個專案,分別提供兩個服務
給專案隨便新建乙個控制器提供健康檢查使用
[
route
("api/[controller]")]
[apicontroller
]public
class
healthcontroller
:controllerbase
}
program 中新增以下**
public
static
ihostbuilder
createhostbuilder
(string
args):")
;});
}
啟動命令
dotnet msgproject.dll --ip 127.0.0.1 --port 5002新增nuget引用
install-package consul在configure中新增以下**進行服務註冊
// 配置發布的ip
var ip =configuration[
"ip"];
// 配置你發布的埠號
var port = configuration[
"port"];
var servicename = configuration[
"servicename"];
var serviceid = servicename + guid.
newguid()
;// 保證服務名稱的唯一性
var consulthost = configuration[
"consul:host"];
using
(var client =
newconsulclient
(x =
>))
:/api/health"
,// 多長時間做一次檢查
interval = timespan.
fromseconds(10
),// 超時時間
timeout = timespan.
fromseconds(5
)}})
.wait()
;}register((
)=>))});
},
"allowedhosts"
:"*"
,"consul":,
"servicename"
:"訊息服務"
}
consul 監控頁面
5. 服務發現
在簡訊服務中新建乙個介面,提供乙個示例,用於被發現
[
route
("api/[controller]")]
[apicontroller
]public
class
msgcontroller
:controllerbase:");}}
新建乙個專案
**傳送門
服務註冊與發現
在分布式系統中,各個子系統都是多個例項存在,這個時候必須要引入乙個服務協調器,用於給呼叫方提供可用的呼叫提供者的命名訊息。服務協調器,如zookeeper,etcd,eureka 他們必須要有的特性 本身高可用,由多個服務節點構成,就算有些節點掛掉也不影響正常執行,避免了單點故障。本身是乙個分布式,...
服務註冊與發現
背景 使用服務的客戶端可以採取客戶端發現 client side discovery 和服務端發現 server side discovery 兩種方式進行服務的發現,那麼我們如何做到這些呢?考慮因素 乙個服務的每個例項公開乙個遠端介面如http rest thrift等。解決方案 實現服務註冊,服...
服務發現與註冊
提供restful api或者其他的api的服務。為了完成一次請求,服務呼叫方需要知道服務例項的ip和埠。平台中的應用一般有多個例項,例項故障重啟和負載均衡都與服務發現有關。通過服務發現機制,可以透明的對多個例項進行訪問,並實現負載均衡。且應用的某個例項隨時可能故障,這時就需要動態配置服務呼叫方的路...