1. 程式人生 > >升級微服務架構2:服務註冊

升級微服務架構2:服務註冊

ces 就是 war pri gin 2.0 com cli depend

  微服務架構中,服務是最小的可伸縮的獨立部署的單位,同一個服務提供可以有多個實例,這些實例都會註冊到服務註冊中心(Eureka Server)上進行統一的管理及調用的負載均衡。
  因Spring Cloud的是已Java為主要開發語言,本文會先講Java語言的服務怎麽註冊到服務中心,然後按照這個邏輯移植到.net版本上。

  1.創建java版服務,並註冊到服務中心

  1.1創建一個Eureka Client的Maven項目

  操作模式和上一篇使用Maven創建Eureka Server一樣,模塊名:userservice(用戶服務)

  Eureka Client和web添加依賴:  

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</
artifactId> </dependency>

  創建Spring Boot 啟動類並加上註解@SpringBootApplication和@EnableEurekaClient

  技術分享圖片

  創建一個User實體,一個UserController類並註解為RestController,寫一個返回用列表的方法。  

@RestController
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/getall")
    public List<User> getAll(){
        ArrayList
<User> list=new ArrayList<>(); User user1=new User(); user1.setAge(10); user1.setName("小明"); user1.setDeleted(false); User user2=new User(); user2.setAge(12); user2.setName("小紅"); user2.setDeleted(true); list.add(user1); list.add(user2); return list; }

  1.2配置服務中心

  服務配置信息:

server:
  port: 7771 #服務端口

eureka:
  client:
    registerWithEureka: true #是否註冊
    fetchRegistry: true #啟用客戶端緩存
    serviceUrl:
      defaultZone: http://peer1:8881/eureka/,http://peer2:8882/eureka/ #註冊到兩個服務中心

spring:
  application:
    name: userservice #服務名

  啟動該服務,刷新下服務中心,可以看到userservice已經註冊成功

  技術分享圖片

  訪問userservice獲取用戶的方法,成功返回Json數據

  技術分享圖片

  1.3啟動多個userservice服務實例並註冊

  IEDA修改啟動配置,去掉啟動僅單個實例 ,Edit Configurations->選擇要修改的配置->去掉勾選Single Instance only

  技術分享圖片

  技術分享圖片

  修改userservice的端口為7772啟動一個實例,啟動成功後再修改端口為7773啟動,這樣就有三個實例註冊到了服務中心

  技術分享圖片

  Java版的服務註冊就完成了,安裝這個思路使用.net core來創建個同樣的服務並註冊到服務中心

  2.創建.net core服務,並註冊到服務中心

  2.1創建.net core API項目

  創建一個空解決方案MicroService,然後創建一個.net core web api項目UserService

  技術分享圖片

  選擇.net core 2.1,項目類型選擇API,暫時不用HTTPS,去掉勾選

  技術分享圖片

  在NuGet包管理器中搜索Pivotal.Discovery.Client,選擇.net core版Pivotal.Discovery.ClientCore,這個組件相當於Java中的Eureka Client組件,用於服務註冊,現在最新穩定版為2.0.1,非Core版本也可以,不過最近一次更新是2017年9月份了,這裏選擇Core版。

  技術分享圖片

  2.2配置服務中心

  服務註冊配置可參考steeltoe官方文檔,和java版的Eureka Client配置大致類似  

  配置文件:   

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*",
/*服務註冊配置*/
  "spring": {
    "application": {
      "name": "userservice"/*服務名*/
    }
  },
  "eureka": {
    "client": {
      "serviceUrl": "http://localhost:8881/eureka/", /*Eureka服務地址*/
      "shouldRegisterWithEureka": true,/*是否註冊到Eureka Server*/
      "shouldFetchRegistry": true /*開啟本地緩存*/
    },
    "instance": {
      "port": 7779 /*服務端口*/
    }
  }
}

  經實踐發現Eureka配置文件中的serviceUrl只能用一個地址,多個服務中心地址不知道為什麽註冊不上,而且只能用localhost或IP,如127.0.0.1,使用peer1,peer2也註冊不上,什麽原因暫時還沒去研究。

  在Program類中指定不同環境配置文件

  參考:http://steeltoe.io/docs/steeltoe-discovery/#reading-configuration-values
  如不指定配置文件會導致報錯:ArgumentException: Discovery client type UNKNOWN, check configuration,原因就是找不到配置文件,配置服務發現時可加Configuration.GetSection("eureka").GetChildren().Any()來判斷能否取到eureka節點的配置文件。

  技術分享圖片

  在Startup啟動類ConfigureServices方法中添加服務發現客戶端配置,在Configure方法中添加使用服務發現客戶端的方法

  這個類似於Spring Boot的啟動類中設置Eureka Client註解一樣

  技術分享圖片

  創建一個User實體,屬性和Java端一樣,註意java的Getter和Setter對應的字段是小寫開頭,且默認is開頭的序列化會去掉前面的is。

  技術分享圖片

  同樣創建一個UserController和一個getAll方法,返回用戶列表。

  2.3服務啟動配置並註冊到服務中心

  在項目屬性->調試中選擇IIS Express調試,並將端口設置為服務端口7779

  技術分享圖片

  或者直接在launchSettings.json改端口

  技術分享圖片

  啟動VS調試該服務,瀏覽器調用該API,http://localhost:7779/user/getall

  成功返回Json信息

  技術分享圖片

  再刷新下Eureka Server,發現服務以及註冊成功。

  技術分享圖片

  到此.net core的微服務也已成功完成註冊。

升級微服務架構2:服務註冊