spring cloud+dotnet core搭建微服务架构:Api网关(三)
前言
國(guó)慶假期,一直沒有時(shí)間更新。
根據(jù)群里面的同學(xué)的提問,強(qiáng)烈推薦大家先熟悉下spring cloud。文章下面有純潔大神的spring cloud系列。
上一章最后說了,因?yàn)榉?wù)是不對(duì)外暴露的,所以在外網(wǎng)要訪問服務(wù)必須通過API網(wǎng)關(guān)來完成,而spring cloud 提供了現(xiàn)成的Api網(wǎng)關(guān)組件zuul。它包含了路由,授權(quán),壓力測(cè)試等一系列功能。如下圖所示,Api網(wǎng)關(guān)在整個(gè)應(yīng)用環(huán)境的位置。
業(yè)務(wù)場(chǎng)景
我們先模擬一個(gè)業(yè)務(wù)場(chǎng)景,客戶端(web,ios,android...)通過Api網(wǎng)關(guān)訪問訂單服務(wù),訂單服務(wù)有兩個(gè)節(jié)點(diǎn),為了模擬集群效果,這兩個(gè)節(jié)點(diǎn)分別返回不同的數(shù)據(jù)。那么我們一共需要?jiǎng)?chuàng)建4個(gè)應(yīng)用程序。服務(wù)中心(Java)、Api網(wǎng)關(guān)(Java)、訂單服務(wù)1(.NET Core)、訂單服務(wù)2(.NET Core)。
代碼部分
服務(wù)中心
使用intellij idea創(chuàng)建一個(gè)spring boot項(xiàng)目,創(chuàng)建服務(wù)中心。設(shè)置端口為5000。
pom.xml
ServiceCenterApplication.java
public class ServiceCenterApplication {public static void main(String[] args) {SpringApplication.run(ServiceCenterApplication.class, args);} }application.properties
spring.application.name=service-center server.port=5000Api網(wǎng)關(guān)
使用intellij idea創(chuàng)建一個(gè)spring boot項(xiàng)目,創(chuàng)建Api網(wǎng)關(guān)服務(wù)。設(shè)置端口為5555。
pom.xml
ServiceGatewayApplication.java
public class ServiceGatewayApplication {public static void main(String[] args) {SpringApplication.run(ServiceGatewayApplication.class, args);} }application.properties
spring.application.name=service-gateway server.port=5555eureka.client.serviceUrl.defaultZone=http://localhost:5000/eureka/zuul.routes.order.path=** zuul.routes.order.serviceId=order上面配置是不是和nginx很像。zuul還提供了默認(rèn)規(guī)則,http://ZUUL_HOST:ZUUL_PORT/serviceId/**,滿足這一規(guī)則的會(huì)自動(dòng)代理,如上面的配置完全可以不用寫,這樣大量的服務(wù)就不用一個(gè)一個(gè)配置了。
訂單服務(wù)1
使用vs2017創(chuàng)建 .NET Core Web Api應(yīng)用程序
appsettings.json
{"Logging": {"IncludeScopes": false,"LogLevel": {"Default": "Warning"}},"spring": {"application": {"name": "order"}},"eureka": {"client": {"serviceUrl": "http://localhost:5000/eureka/"},"instance": {"port": 8010}} }ValuesController.cs
[Route("/")]public class ValuesController : Controller{[HttpGet] ? ?public string Get() ? ?{ ? ?
? ?return "order1";} }
訂單服務(wù)2
同訂單服務(wù)1的創(chuàng)建過程,修改端口為8011和返回結(jié)果。
appsettings.json
{"Logging": {"IncludeScopes": false,"LogLevel": {"Default": "Warning"}},"spring": {"application": {"name": "order"}},"eureka": {"client": {"serviceUrl": "http://localhost:5000/eureka/"},"instance": {"port": 8011}} }ValuesController.cs
[Route("/")]public class ValuesController : Controller{[HttpGet] ? ?public string Get() ? ?{ ? ? ? ?return "order2";} }篇幅有限,以上代碼均有精簡(jiǎn),完整代碼請(qǐng)去Github上獲取。
我們現(xiàn)在一共有4個(gè)應(yīng)用程序:
eureka服務(wù)中心,端口5000,應(yīng)用名稱service-center
zuul網(wǎng)關(guān)服務(wù),端口5555,應(yīng)用名稱service-gateway
訂單服務(wù)1,端口8010,應(yīng)用名稱order
訂單服務(wù)2,端口8011,應(yīng)用名稱order
其中訂單服務(wù)1和訂單服務(wù)2組成了訂單服務(wù)集群
分別啟動(dòng)這4個(gè)應(yīng)用程序。打開eureka服務(wù):http://localhost:5000/,
如下圖所示都注冊(cè)成功。
打開http://localhost:5555/order,返回"order1"
刷新后返回"order2",反復(fù)多次刷新,"order1"和"order2"依次返回。
后記
通過上面的例子說明Api網(wǎng)關(guān)服務(wù)已經(jīng)生效,并且實(shí)現(xiàn)了負(fù)載均衡。結(jié)合具體的業(yè)務(wù)場(chǎng)景,我們的生產(chǎn)環(huán)境只對(duì)外暴露5555端口,客戶端訪問Api網(wǎng)關(guān),由Api網(wǎng)關(guān)去路由到各個(gè)服務(wù)節(jié)點(diǎn),這樣所有的客戶端調(diào)用都統(tǒng)一了入口。
示例代碼
所有代碼均上傳github。
求推薦,你們的支持是我寫作最大的動(dòng)力,我的QQ群:328438252,交流微服務(wù)。
相關(guān)文章:?
-
手把手教你使用spring cloud+dotnet core搭建微服務(wù)架構(gòu):服務(wù)治理(-)
-
spring cloud+dotnet core搭建微服務(wù)架構(gòu):服務(wù)發(fā)現(xiàn)(二)
-
微服務(wù)~Eureka實(shí)現(xiàn)的服務(wù)注冊(cè)與發(fā)現(xiàn)及服務(wù)之間的調(diào)用
原文地址:http://www.cnblogs.com/longxianghui/p/7646870.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺(tái)或掃描二維碼關(guān)注
總結(jié)
以上是生活随笔為你收集整理的spring cloud+dotnet core搭建微服务架构:Api网关(三)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: gRPC官方快速上手学习笔记(c#版)
- 下一篇: 一起聊聊Microsoft.Extens