前言

国庆假期,一直没有时间更新。
根据群里面的同学的提问,强烈推荐大家先熟悉下spring cloud。文章下面有纯洁大神的spring cloud系列。
上一章最后说了,因为服务是不对外暴露的,所以在外网要访问服务必须通过API网关来完成,而spring cloud 提供了现成的Api网关组件zuul。它包含了路由,授权,压力测试等一系列功能。如下图所示,Api网关在整个应用环境的位置。

业务场景

我们先模拟一个业务场景,客户端(web,ios,android...)通过Api网关访问订单服务,订单服务有两个节点,为了模拟集群效果,这两个节点分别返回不同的数据。那么我们一共需要创建4个应用程序。服务中心(Java)、Api网关(Java)、订单服务1(.NET Core)、订单服务2(.NET Core)。

代码部分

服务中心

使用intellij idea创建一个spring boot项目,创建服务中心。设置端口为5000。
pom.xml

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka-server</artifactId></dependency>

ServiceCenterApplication.java

@EnableEurekaServer@SpringBootApplicationpublic class ServiceCenterApplication {public static void main(String[] args) {SpringApplication.run(ServiceCenterApplication.class, args);}
}

application.properties

spring.application.name=service-center
server.port=5000

Api网关

使用intellij idea创建一个spring boot项目,创建Api网关服务。设置端口为5555。
pom.xml

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zuul</artifactId></dependency>

ServiceGatewayApplication.java

@SpringBootApplication@EnableZuulProxypublic 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=/order/**
zuul.routes.order.serviceId=order

上面配置是不是和nginx很像。zuul还提供了默认规则,http://ZUUL_HOST:ZUUL_PORT/serviceId/**,满足这一规则的会自动代理,如上面的配置完全可以不用写,这样大量的服务就不用一个一个配置了。

订单服务1

使用vs2017创建 .NET Core Web Api应用程序

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";}
}

订单服务2

同订单服务1的创建过程,修改端口为8011和返回结果。

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";}
}

篇幅有限,以上代码均有精简,完整代码请去Github上获取。

我们现在一共有4个应用程序:

  1. eureka服务中心,端口5000,应用名称service-center

  2. zuul网关服务,端口5555,应用名称service-gateway

  3. 订单服务1,端口8010,应用名称order

  4. 订单服务2,端口8011,应用名称order

其中订单服务1和订单服务2组成了订单服务集群

分别启动这4个应用程序。打开eureka服务:http://localhost:5000/,
如下图所示都注册成功。

打开http://localhost:5555/order,返回"order1"

刷新后返回"order2",反复多次刷新,"order1"和"order2"依次返回。

后记

通过上面的例子说明Api网关服务已经生效,并且实现了负载均衡。结合具体的业务场景,我们的生产环境只对外暴露5555端口,客户端访问Api网关,由Api网关去路由到各个服务节点,这样所有的客户端调用都统一了入口。

示例代码

所有代码均上传github。
求推荐,你们的支持是我写作最大的动力,我的QQ群:328438252,交流微服务。

相关文章:

  • 手把手教你使用spring cloud+dotnet core搭建微服务架构:服务治理(-)

  • spring cloud+dotnet core搭建微服务架构:服务发现(二)

  • 微服务~Eureka实现的服务注册与发现及服务之间的调用

原文地址:http://www.cnblogs.com/longxianghui/p/7646870.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

spring cloud+dotnet core搭建微服务架构:Api网关(三)相关推荐

  1. spring cloud+dotnet core搭建微服务架构:配置中心续(五)

    前言 上一章最后讲了,更新配置以后需要重启客户端才能生效,这在实际的场景中是不可取的.由于目前Steeltoe配置的重载只能由客户端发起,没有实现处理程序侦听服务器更改事件,所以还没办法实现彻底实现这 ...

  2. spring cloud+dotnet core搭建微服务架构:配置中心(四)

    前言 我们项目中有很多需要配置的地方,最常见的就是各种服务URL地址,这些地址针对不同的运行环境还不一样,不管和打包还是部署都麻烦,需要非常的小心.一般配置都是存储到配置文件里面,不管多小的配置变动, ...

  3. spring cloud+dotnet core搭建微服务架构:服务发现(二)

    前言 上篇文章<手把手教你使用spring cloud+dotnet core搭建微服务架构:服务治理(-)>实际上只讲了服务治理中的服务注册,服务与服务之间如何调用呢?传统的方式,服务A ...

  4. 手把手教你使用spring cloud+dotnet core搭建微服务架构:服务治理(-)

    背景 公司去年开始使用dotnet core开发项目.公司的总体架构采用的是微服务,那时候由于对微服务的理解并不是太深,加上各种组件的不成熟,只是把项目的各个功能通过业务层面拆分,然后通过nginx代 ...

  5. spring cloud+.net core搭建微服务架构:Api授权认证(六)

    前言 这篇文章拖太久了,因为最近实在太忙了,加上这篇文章也非常长,所以花了不少时间,给大家说句抱歉.好,进入正题.目前的项目基本都是前后端分离了,前端分Web,Ios,Android...,后端也基本 ...

  6. 【译文】用Spring Cloud和Docker搭建微服务平台

    by Kenny Bastani Sunday, July 12, 2015 转自:http://www.kennybastani.com/2015/07/spring-cloud-docker-mi ...

  7. 用Spring Cloud和Docker搭建微服务平台

    This blog series will introduce you to some of the foundational concepts of building a microservice- ...

  8. Spring Cloud Alibaba 系统保护:微服务架构雪崩效应与服务限流

    前面我们介绍了 OpenFeign 微服务间通信与 Spring Cloud Gateway 网关通信,这些是日常业务中的正常处理情况,但是在微服务环境下受制于网络.机器性能.算法.程序各方面影响,运 ...

  9. iis7 您无权使用所提供的凭据查看此目录或页面。_使用Spring Cloud和Docker构建微服务架构

    原文:https://dzone.com/articles/microservice-architecture-with-spring-cloud-and-do作者:Alexander Lukyanc ...

最新文章

  1. Vim 自动文件头注释与模板定义
  2. ActiveX组件及其注册 (轉)
  3. hive substr函数_数据分析工具篇——HQL函数及逻辑
  4. poj 1987 树的分治
  5. PE 文件格式 详解 一
  6. 在ubuntu20.04上安装最新版的qq
  7. 二人成团,阿里云服务器拼团活动开启
  8. PyQt5系列教程(二)利用QtDesigner设计UI界面
  9. 开源中国源码学习(一)——简介
  10. 玩转华为ENSP模拟器系列 | 配置静态LSP示例
  11. IBM Spectrum LSF社区版下载
  12. C++实战(一)——选择结构案例:三只小猪称体重
  13. 短视频运营创作方案教程
  14. mellanox 网卡驱动_Mellanox驱动安装—源码包的使用
  15. The Swift Programming Language swift 4 下载地址
  16. 记录一次alignment fault
  17. 15 【Pinia】
  18. 每日英语阅读(三十四)
  19. 对Android中arm64-v8a、armeabi-v7a、armeabi、x86认识,看完这个就全明白了
  20. python合法的布尔表达式_python-布尔表达式

热门文章

  1. illegal multibyte sequence python3
  2. Jenkins修改管理员密码.
  3. 《统计会犯错——如何避免数据分析中的统计陷阱》—第2章置信区间的优势
  4. OSChina 周六乱弹 —— 有人骂你神经病怎么办?
  5. SQL点滴19—T-SQL中的透视和逆透视
  6. WPF 实现大转盘抽奖~
  7. MySQL优化从执行计划开始(explain超详细)
  8. Newbe.Claptrap 框架入门,第二步 —— 创建项目
  9. 收藏的RabbitMQ资料,分享给大家
  10. [Abp 源码分析]ASP.NET Core 集成