spring cloud+.net core搭建微服務架構:服務發現(二)
前言
上篇文章實際上只講了服務治理中的服務註冊,服務與服務之間如何呼叫呢?傳統的方式,服務A呼叫服務B,那麼服務A訪問的是服務B的負載均衡地址,通過負載均衡來指向到服務B的真實地址,上篇文章已經說了這種方式的缺點。那麼下面講如何在spring cloud+dotnet core的應用下進行服務呼叫。
程式碼實現
假設一種場景,有一個訂單服務,有一個產品服務,其中產品服務是由兩個服務節點組成一個叢集。需求是訂單服務訪問產品服務的一個API介面。根據上一章文章的內容建立3個應用程式ServiceOne(埠8010),ServiceTwo(埠8011),ServiceThree(8012)。其中ServiceOne設定應用程式名稱為order。ServiceTwo和ServiceThree的應用程式名稱為product,做成叢集。
ServiceOne.appsettings.json
{ "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Warning" } }, "spring": { "application": { "name": "order" } }, "eureka": { "client": { "serviceUrl": "http://localhost:5000/eureka/" }, "instance": { "port": 8010 } } }
ServiceOne.Controllers.ValuesController.CS
private readonly DiscoveryHttpClientHandler _handler; private const string ProductUrl = "http://product/api/values"; public ValuesController(IDiscoveryClient client, ILoggerFactory logFactory) { _handler = new DiscoveryHttpClientHandler(client); } [HttpGet("product")] public async Task<string> GoProductAsync() { var client = new HttpClient(_handler, false); return await client.GetStringAsync(ProductUrl); }
ServiceTwo.appsettings.json
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
},
"spring": {
"application": {
"name": "product"
}
},
"eureka": {
"client": {
"serviceUrl": "http://localhost:5000/eureka/"
},
"instance": {
"port": 8011
}
}
}
ServiceTwo.appsettings.json
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
},
"spring": {
"application": {
"name": "product"
}
},
"eureka": {
"client": {
"serviceUrl": "http://localhost:5000/eureka/"
},
"instance": {
"port": 8012
}
}
}
為了展現訪問的差異,設定不同的返回值。
ServiceTwo.Controllers.ValuesController.cs
[HttpGet]
public string Get()
{
return "ServiceTwo";
}
ServiceThree.Controllers.ValuesController.cs
[HttpGet]
public string Get()
{
return "ServiceThree";
}
同時啟動這3個專案,先看看服務中心http://localhost:5000/
這個3個應用程式都已經註冊到了服務中心。ServiceOne被註冊到ORDER,ServiceTwo和ServiceThree註冊到了PRODUCT。
分別訪問
http://localhost:8011/api/values 返回ServiceTwo
http://localhost:8012/api/values 返回ServiceThree
證明這兩個服務是沒有問題的。
再訪問http://localhost:8010/api/values/product,
如圖所示,分別返回了“ServiceTwo”和“ServiceThree”,多重新整理幾次,發現結果是來回變動的,這說明服務中心幫我們實現了負載均衡。
我們再做一個測試,斷開ServiceTwo這個應該程式。我們繼續訪問http://localhost:8010/api/values/product,發現一次錯誤,一次正常返回ServiceThree。30秒以後(可配置)再訪問正常返回ServiceThree,同時發現服務中心已經踢掉了埠為8011的應用程式(ServiceTwo)。
後記
通過上面3個例項我們模擬了分散式的呼叫場景,其中Order訪問Product叢集的時候,並沒有指定具體的地址,而是指定了服務名稱(product),服務中心自動分配了地址,並實現了負載均衡。聯絡實際應用場景,配合docker,我們可以快速的對某個服務進行新增,不再需要維護服務節點。同時某個服務節點掛掉以後,服務中心也會踢出這個服務節點(會有短暫的不可用)。結合CAP理論來說,服務中心滿足了AP。
這篇文章講解了服務之間的呼叫,我們實際的應用場景,還有各種客戶端(IOS,Andriod,Web...)來訪問,而服務一般是內網不對外暴露的,所以客戶端訪問服務的時候就需要有一個專門對外暴露的入口,那麼就引入了下篇文章的API閘道器。
示例程式碼
所有程式碼均上傳github。程式碼按照章節的順序上傳,例如第一章demo1,第二章demo2以此類推。
求推薦,你們的支援是我寫作最大的動力,我的QQ群:328438252,交流微服務。
傳送門
參考資料
java部分
.net部分
相關推薦
跟著園內spring cloud+.net core搭建微服務架構 服務消費出錯問題
bubuko product xxx alt 我沒 .dll 端口 sin 無法 http://www.cnblogs.com/longxianghui/p/7561259.html 最近在跟隨著園區內的這個博客做服務發現的時候,發覺在vs 上調整了端口
spring cloud+.net core搭建微服務架構:服務註冊(一)
背景 公司去年開始使用dotnet core開發專案。公司的總體架構採用的是微服務,那時候由於對微服務的理解並不是太深,加上各種元件的不成熟,只是把專案的各個功能通過業務層面拆分,然後通過nginx代理,專案最終上線。但是這遠遠沒達到微服務的要求,其中服務治理,斷路器都沒有。我個人理解,我們談微服務實際上更多
spring cloud+.net core搭建微服務架構:Api閘道器(三)
前言 國慶假期,一直沒有時間更新。 根據群裡面的同學的提問,強烈推薦大家先熟悉下spring cloud。文章下面有純潔大神的spring cloud系列。 上一章最後說了,因為服務是不對外暴露的,所以在外網要訪問服務必須通過API閘道器來完成,而spring cloud 提供了現成的Api閘道器元件zuul
spring cloud+.net core搭建微服務架構:服務發現(二)
前言 上篇文章實際上只講了服務治理中的服務註冊,服務與服務之間如何呼叫呢?傳統的方式,服務A呼叫服務B,那麼服務A訪問的是服務B的負載均衡地址,通過負載均衡來指向到服務B的真實地址,上篇文章已經說了這種方式的缺點。那麼下面講如何在spring cloud+dotnet core的應用下進行服務呼叫。 程式碼實
spring cloud+.net core搭建微服務架構:配置中心(四)
前言 我們專案中有很多需要配置的地方,最常見的就是各種服務URL地址,這些地址針對不同的執行環境還不一樣,不管和打包還是部署都麻煩,需要非常的小心。一般配置都是儲存到配置檔案裡面,不管多小的配置變動,都需要對應用程式進行重啟,對於分散式系統來說,這是非常不可取的。所以配置中心就在這種場景孕育出來,能夠適配不同
手把手教你使用spring cloud+dotnet core搭建微服務架構 服務治理(-)
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
spring cloud + .net core實現微服務架構
1.新建spring boot專案 2.新增spring-cloud-starter-eureka-server依賴(需提供版本資訊) <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-star
spring cloud+dotnet core搭建微服務架構:Api閘道器(三)
前言 國慶假期,一直沒有時間更新。 根據群裡面的同學的提問,強烈推薦大家先熟悉下spring cloud。文章下面有純潔大神的spring cloud系列。 上一章最後說了,因為服務是不對外暴露的,所以在外網要訪問服務必須通過API閘道器來完成,而spring cloud 提供了現成的Api閘道器元件z
Spring Cloud+Vue簡單模仿微博四:服務提供者整合Hibernate以及設計資料庫
一、建立資料庫 暫時先建立一個使用者表 /* Navicat MySQL Data Transfer Source Server : MyDB Source Server Version : 50549 Source Host : l
ASP.NET Core 打造一個簡單的圖書館管理系統(二)Code First 多對多關係的建立
前言: 本系列文章主要為我之前所學知識的一次微小的實踐,以我學校圖書館管理系統為雛形所作。 本系列文章主要參考資料: 微軟文件:https://docs.microsoft.com/zh-cn/aspnet/core/getting-started/?view=aspnetcore-2.1&ta
ASP.NET Core 打造一個簡單的圖書館管理系統(二)Code First 多對多關系的建立
兩個 microsoft 創建 int lan rar -c bsp dem 前言: 本系列文章主要為我之前所學知識的一次微小的實踐,以我學校圖書館管理系統為雛形所作。 本系列文章主要參考資料: 微軟文檔:https://docs.microsoft.com/zh-c
.NET Core 3.0之深入原始碼理解ObjectPool(二)
寫在前面 前文主要介紹了ObjectPool的一些理論基礎,本文主要從原始碼角度理解Microsoft.Extensions.ObjectPool是如何實現的。下圖為其三大核心元件圖: 核心元件 ObjectPool ObjectPool是一個泛型抽象類,裡面只有兩個抽象方法,Get和Return。它從底
.NET Core 3.1之深入原始碼理解HealthCheck(二)
寫在前面前文討論了HealthCheck的理論部分,本文將討論有關HealthCheck的應用內容。可以監視記憶體、磁碟和其他物理伺服器資源的使用情況來了解是否處於正常狀態。執行狀況檢查可以測試應用的依賴項(如資料庫和外部服務終結點)以確認是否可用和正常工作。執行狀況探測可以由容器業務流程協調程式和負載均衡器
基於 abp vNext 和 .NET Core 開發部落格專案 - Blazor 實戰系列(二)
## 系列文章 1. **[基於 abp vNext 和 .NET Core 開發部落格專案 - 使用 abp cli 搭建專案](https://www.cnblogs.com/meowv/p/12896177.html)** 2. **[基於 abp vNext 和 .NET Core 開發部落格專案
ASP.NET Core 3.x啟動時執行非同步任務(二)
這一篇是接著前一篇在寫的。如果沒有看過前一篇文章,建議先去看一下前一篇,這兒是傳送門 一、前言 前一篇文章,我們從應用啟動時非同步執行任務開始,說到了必要性,也說到了幾種解決方法,及各自的優缺點。最後,還提出了一個比較合理的解決方法:通過在Program.cs里加入程式碼,來實現IWebHost啟動
Spring Cloud Alibaba+Nacos搭建微服務架構
1. Spring Cloud Alibaba 簡介 Spring Cloud Alibaba是阿里巴巴為分散式應用提供的一站式解決方案,能夠更方便快捷地搭建分散式平臺,nacos擁有著替換eureka server ,spring cloud config等元件的目標和意圖,旨在能夠更簡便快速地去管理
Spring Cloud構建微服務架構:服務消費(基礎)
消費 ring str frame emp default class a template pom.xml 使用LoadBalancerClient在Spring Cloud Commons中提供了大量的與服務治理相關的抽象接口,包括DiscoveryClient、這裏我
Spring Cloud構建PC蛋蛋源碼下載微服務架構:服務消費(基礎)
true ota ctu temp control lan prope 源碼下載 builder PC蛋蛋源碼下載論壇:haozbbs.com Q1446595067 使用LoadBalancerClient 在Spring Cloud Commons中提供了大量的與服務治
Spring Cloud構建微服務架構:服務註冊與發現 Eureka
Spring Cloud構建微服務架構:服務註冊與發現Eureka 【Dalston版】 原創 2018-04-10 宗野 Spring Cloud 已經
Spring Cloud構建微服務架構:服務容錯保護(Hystrix服務降級)
tro sco load 服務架構 延遲 正常 map ati href 動手試一試 在開始使用Spring Cloud Hystrix實現斷路器之前,我們先拿之前實現的一些內容作為基礎,其中包括: eureka-server工程:服務註冊中心,端口:1001 eurek