1. 程式人生 > >spring cloud+.net core搭建微服務架構:服務註冊(一)

spring cloud+.net core搭建微服務架構:服務註冊(一)

背景

公司去年開始使用dotnet core開發專案。公司的總體架構採用的是微服務,那時候由於對微服務的理解並不是太深,加上各種元件的不成熟,只是把專案的各個功能通過業務層面拆分,然後通過nginx代理,專案最終上線。但是這遠遠沒達到微服務的要求,其中服務治理,斷路器都沒有。我個人理解,我們談微服務實際上更多的是談服務治理這塊東西,至於各個的服務只是微服務中的應用而已。一次偶然的機會發現了java的spring cloud這套框架,而且支援dotnet core整合(Steeltoe OSS)。所以目前我們的專案架構是spring cloud搭建底層微服務框架,dotnet core來編寫業務邏輯。

spring cloud

spring cloud是java平臺提供的一套解決方案,目前市面上來說可能不是最好的微服務解決方案,但是一定是功能最齊全最全的解決方案。提供了一些微服務的基礎功能,包括服務治理、負載均衡、斷路器、配置中心、API閘道器等等。

服務治理

關於服務治理這塊東西,網上太多太多的資料和原理。相信大家也看了很多,但是如何應用到實際的專案場景,為什麼要這樣做呢?傳統的專案,服務與服務之間的呼叫都是通過URL來訪問,如果是叢集那麼通過一個負載均衡地址來訪問,增加或者減少機器都是通過維護負載均衡列表的IP地址來實現。微服務架構下,分散成了N個服務,每個服務又是一個叢集,對於一個大專案來說,維護這些配置是非常頭疼的。筆者曾經在某知名網際網路公司工作過,公司最累最背鍋的就是運維團隊,基本24小時都在應付各個團隊的部署上線工作以及各種配置的維護,而且還經常出錯捱罵。那麼服務治理就出現在這種應用場景之中,運維工程師不用再維護各個負載均衡節點,由服務中心去統一處理。舉個簡單例子,一個電商網站,分解成N個服務,其中有一個使用者服務,有一個訂單服務,使用者服務需要呼叫訂單服務,而訂單服務是一個叢集,對於使用者中心來說他只需要知道訪問訂單中心即可,至於具體訪問訂單中心的哪臺機器由服務中心來調配。

搭建服務治理平臺

  1. java開發環境和IDE使用請自行百度,筆者java開發的ide使用的intellij idea。
  2. 建立一個spring boot專案,專案名稱service-center,新增spring cloud的依賴
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
  1. 新增@EnableEurekaServer註解
@EnableEurekaServer
@SpringBootApplication
public class ServiceCenterApplication {}
  1. 設定應用程式的埠和名稱
spring.application.name=service-center
server.port=5000
  1. 啟動專案,在瀏覽器輸入http://localhost:5000/
    image

註冊服務

  1. 使用vs建立一個dotnet core web api程式
  2. 使用nuget新增Pivotal.Discovery.Client庫
<PackageReference Include="Pivotal.Discovery.Client" Version="1.1.0" />

3.Program.cs 設定一個埠

public static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                .UseKestrel()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseStartup<Startup>()
                .UseApplicationInsights()
                .UseUrls("http://*:8010")
                .Build();

            host.Run();
        }
  1. Startup.cs
 public void ConfigureServices(IServiceCollection services)
        {
            services.AddDiscoveryClient(Configuration);
            // Add framework services.
            services.AddMvc();
        }
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();

            app.UseMvc();
            app.UseDiscoveryClient();
        }
  1. appsettings.json
{
    "Logging": {
        "IncludeScopes": false,
        "LogLevel": {
            "Default": "Warning"
        }
    },
    "spring": {
        "application": {
            "name": "serviceone"
        }
    },
    "eureka": {
        "client": {
            "serviceUrl": "http://localhost:5000/eureka/",
            "shouldFetchRegistry": false,
            "shouldRegisterWithEureka": true 
        },
        "instance": {
            "port": 8010
        }
    }
}

如果是團隊開發,"shouldRegisterWithEureka"設定成false,防止本地環境註冊到開發環境

  1. 啟動程式,再次訪問http://localhost:5000/發現已經註冊到服務中心了
    image
  2. 同樣的方式我們再建立一個ServiceTwo的專案,修改programe.cs和appsettings.json檔案,其它不變
public static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                .UseKestrel()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseStartup<Startup>()
                .UseApplicationInsights()
                .UseUrls("http://*:8011")
                .Build();

            host.Run();
{
    "Logging": {
        "IncludeScopes": false,
        "LogLevel": {
            "Default": "Warning"
        }
    },
    "spring": {
        "application": {
            "name": "servicetwo"
        }
    },
    "eureka": {
        "client": {
            "serviceUrl": "http://loclhost:5000/eureka/",
            "shouldFetchRegistry": false,
            "shouldRegisterWithEureka": true 
        },
        "instance": {
            "port": 8011
        }
    }
}
  1. 再次訪問http://localhost:5000/,發現ServiceOne和ServiceTwo都已經註冊到服務中心了
    image

後記

這樣一個簡單的服務治理平臺就搭建出來了,我們通過spring cloud來建立了一個服務中心,然後通過dotnet core建立了2個服務註冊到了服務中心,但是這些離微服務還差的遠.服務之間怎麼相互呼叫呢?叢集模式怎麼處理呢?微服務的統一API閘道器呢?留下這些問題,且聽下回分解。
第二篇文章已經發布。spring cloud+dotnet core搭建微服務架構:服務發現(二)

示例程式碼

所有程式碼均上傳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

關於服務架構的個人理解

廣泛 直接 dubbo 消息 可控 strong 均衡 沖突 外部依賴 前言:這段時間項目組正在加班加點的進行基於現有單體應用的微服務架構改造。微服務是一種架構概念,這個概念是2012年出現的,作為加快Web和移動應用程序開發進程的一種方法,2014年開始受到各方的關

ASP.NET Core 打造一個簡單的圖書館管理系統 基本模型以及數據庫的建立

allow shel 系列 sqlserver rar 刪除數據庫 mvc 5 字段 約定 前言: 本系列文章主要為我之前所學知識的一次微小的實踐,以我學校圖書館管理系統為雛形所作。 本系列文章主要參考資料: 微軟文檔:https://docs.microsoft.c

ASP.NET Core 打造一個簡單的圖書館管理系統 基本模型以及資料庫的建立

前言: 本系列文章主要為我之前所學知識的一次微小的實踐,以我學校圖書館管理系統為雛形所作。 本系列文章主要參考資料: 微軟文件:https://docs.microsoft.com/zh-cn/aspnet/core/getting-started/?view=aspnetcore-2.1&ta

【Asp.Net MVC+EF+三層架構】詳解初見

前言: 這個專案是小編我進入公司開始全面重頭開始著手的第一個專案,在寶寶的IT生涯裡這是一個里程碑,有著與眾不同的意義。那麼在之後小編會從頭至尾的寫一組關於Asp.Net MVC+EF+三層架構框架

.NET Core 3.0之深入原始碼理解ObjectPool

寫在前面 物件池是一種比較常用的提高系統性能的軟體設計模式,它維護了一系列相關物件列表的容器物件,這些物件可以隨時重複使用,物件池節省了頻繁建立物件的開銷。 它使用取用/歸還-重複取用的操作模式,如下圖所示: 本文將主要介紹物件池的基本概念、物件池的優勢及其工作機制,下一篇文件將從原始碼角度介紹.NET

.NET Core 3.0之深入原始碼理解HealthCheck

寫在前面 我們的系統可能因為正在部署、服務異常終止或者其他問題導致系統處於非健康狀態,這個時候我們需要知道系統的健康狀況,而健康檢查可以幫助我們快速確定系統是否處於正常狀態。一般情況下,我們會提供公開的HTTP介面,用於專門化健康檢查。 NET Core提供的健康檢查庫包括Microsoft.Extensio

基於 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啟動時執行非同步任務

這是一個大的題目,需要用幾篇文章來說清楚。這是第一篇。   一、前言 在我們的專案中,有時候我們需要在應用程式啟動前執行一些一次性的邏輯。比方說:驗證配置的正確性、填充快取、或者執行資料庫清理/遷移等。 如何合理、有效、優雅地完成這個任務,是這個文章討論的主要內容。   要實現這樣一個功能,其實我們有幾

Spring Boot 2.0 WebFlux 上手系列課程快速入門

02:WebFlux 快速入門實踐 Spring Boot 2.0 spring.io 官網有句醒目的話是: BUILD ANYTHING WITH SPRING BOOT Spring Boot (Boot 顧名思義,是引導的意思)框架是用於簡

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、這裏我