升級微服務架構2:服務註冊
微服務架構中,服務是最小的可伸縮的獨立部署的單位,同一個服務提供可以有多個實例,這些實例都會註冊到服務註冊中心(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:服務註冊