服務註冊與服務發現

2021-10-21 20:03:24 字數 2248 閱讀 1472

應用場景: 多台伺服器提供同乙個服務

是儲存服務名稱與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和埠。平台中的應用一般有多個例項,例項故障重啟和負載均衡都與服務發現有關。通過服務發現機制,可以透明的對多個例項進行訪問,並實現負載均衡。且應用的某個例項隨時可能故障,這時就需要動態配置服務呼叫方的路...