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

前言

国庆假期,一直没有时间更新。
根据群里面的同学的提问,强烈推荐大家先熟悉下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跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/323325.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java实现人脸识别源码【含测试效果图】——前期准备工作及访问提示

注意&#xff1a; 看完之后如有不懂&#xff0c;请看&#xff1a;关于人脸和指纹识别共同交流方案&#xff0c;也可以关注微信公众号&#xff1a;雄雄的小课堂&#xff0c;回复&#xff1a;人脸识别群获取群号&#xff0c;群内有直接可以运行的源码可供下载&#xff0c;人脸识…

JS原型链与instanceof底层原理

转载自 JS原型链与instanceof底层原理 一、问题&#xff1a; instanceof 可以判断一个引用是否属于某构造函数&#xff1b; 另外&#xff0c;还可以在继承关系中用来判断一个实例是否属于它的父类型。 老师说&#xff1a;instanceof的判断逻辑是&#xff1a; 从当前引用的…

正则之注册登录

不久前写了个登录注册的网站&#xff0c;因为未对其做出限制&#xff0c;所以&#xff0c;随便你输入什么都可以注册成功&#xff0c;遂想怎么通过js规定注册的账号 我的要求是&#xff1a; 一&#xff1a;输入框不能为空&#xff0c;不能太长也不能太短 二&#xff1a; 1、注…

猿创征文|从酒店前台收银到软件研发教学主管到技术经理之路~

大家好&#xff0c;我是雄雄。 内容先知&#x1f449;前言☝酒店收银&#x1f928;项目组长&#x1f91c;OA管理系统&#x1f91c;酒店管理系统&#x1f468;‍&#x1f3eb;软件研发讲师&#x1f4cc;学术主管&#x1f468;‍&#x1f4bb;技术经理&#x1f449;项目情况&…

微服务~分布式事务里的最终一致性

本地事务ACID大家应该都知道了&#xff0c;统一提交&#xff0c;失败回滚&#xff0c;严格保证了同一事务内数据的一致性&#xff01;而分布式事务不能实现这种ACID&#xff0c;它只能实现CAP原则里的某两个&#xff0c;CAP也是分布式事务的一个广泛被应用的原型&#xff0c;CA…

JavaFX仿windows文件管理器目录树

一、windows文件管理器目录树 二、代码 /** To change this license header, choose License Headers in Project Properties.* To change this template file, choose Tools | Templates* and open the template in the editor.*/ package cn.util;import imagemanagesystem.…

开源纯C#工控网关+组态软件(三)加入一个新驱动:西门子S7

一、 引子 首先感谢博客园&#xff1a;第一篇文章、第一个开源项目&#xff0c;算是旗开得胜。可以看到&#xff0c;项目大部分流量来自于博客园&#xff0c;码农乐园&#xff0c;名不虚传^^。 园友给了我很多支持&#xff0c;并提出了很好的改进意见。现加入屏幕分辨率自适应…

有没有完全自助的国产化数据库技术?

大家好&#xff0c;我是雄雄。 SPL资料 SPL官网SPL下载SPL源代码 前段时间世界部分地区不断的起冲突&#xff0c;Oracle宣布“暂停在俄罗斯的所有业务”&#xff0c;相信大家的心情绝不是隔岸观火&#xff0c;而是细思恐极。 数据库号称IT领域三大核心之一&#xff08;其他两…

我为啥不看好ServiceMesh

转载自 我为啥不看好ServiceMesh 前言 今年&#xff0c;ServiceMesh(服务网格)概念在社区里头非常火&#xff0c;有人提出2018年是ServiceMesh年&#xff0c;还有人提出ServiceMesh是下一代的微服务架构基础。作为架构师&#xff0c;如果你现在还不了解ServiceMesh的话&…

ASP.NET Core 2.0 支付宝当面付之扫码支付

前言 自从微软更换了CEO以后&#xff0c;微软的战略方向有了相当大的变化&#xff0c;不再是那么封闭&#xff0c;开源了许多东西&#xff0c;拥抱开源社区&#xff0c;.NET实现跨平台&#xff0c;收购xamarin并免费提供给开发者等等。我本人是很喜欢.net的&#xff0c;并希望.…

Git使用教程:最详细、最傻瓜、最浅显、真正手把手教

转载自 Git使用教程&#xff1a;最详细、最傻瓜、最浅显、真正手把手教 一&#xff1a;Git是什么&#xff1f; Git是目前世界上最先进的分布式版本控制系统。 工作原理 / 流程&#xff1a; Workspace&#xff1a;工作区 Index / Stage&#xff1a;暂存区 Repository&…

【git】如何在github上推送并部署自己的项目

口令快捷 git add . git commit --m "XXXX" git remote add origin https://github.com/lifeload/new-problem.git git push -f origin master修改或删除文件 git add 对应文件/. git commit -m “xxx” git push origin master 1、上传代码 2、设置&#xff0c;建立…

一起聊聊Microsoft.Extensions.DependencyInjection

Microsoft.Extensions.DependencyInjection在github上同样是开源的&#xff0c;它在dotnetcore里被广泛的使用&#xff0c;比起之前的autofac,unity来说&#xff0c;它可以说是个包裹&#xff0c;或者叫适配器&#xff0c;它自己提供了默认的DI实现&#xff0c;同时也支持第三方…

【git】如何给github绑定ssh

首先在git上输入 &#xff1a; ssh-keygen 会在c盘的用户账号的文件夹.ssh上生成两个密钥 &#xff08;如果没有生成&#xff0c;请注意自己是否按了enter&#xff0c;出现一个小方框为止&#xff09; 将.pug用笔记本打开 全选复制 来到github的设置上 将刚刚复制的东西黏…

【杭州】Hack for Cloud Beginner微软黑客松大赛

在这美丽的西子湖畔&#xff0c;我们欢迎各行各业的开发者参与此次Hack for Cloud Beginner微软黑客松大赛。我们致力于为开发者们提供在技术、社区领域中的交流平台&#xff0c;重在参与&#xff0c;意于创新。 此次黑客松大赛将于10月22日在中国杭州拉开帷幕&#xff0c;参与…

Java高级开发必会的50个性能优化的细节(珍藏版)

转载自 Java高级开发必会的50个性能优化的细节&#xff08;珍藏版&#xff09; 在JAVA程序中&#xff0c;性能问题的大部分原因并不在于JAVA语言&#xff0c;而是程序本身。养成良好的编码习惯非常重要&#xff0c;能够显著地提升程序性能。 ● 1. 尽量在合适的场合使用单例…

从0部署一个动态网站

准备&#xff1a;购买域名和服务器 下载软件&#xff1a;服务器上下载宝塔面板和xampp 首先区分动态网站和静态网站区别&#xff1a;动态网站是指数据可以交互的&#xff0c;根据不同的人出现不同的页面&#xff0c;要用到数据库和php。登录注册是动态网站最基础的部分 而静态…

最新的.NET Framework聚焦于改进可访问性

Microsoft宣布预发布.NET Framework 4.7.1&#xff0c;其中包括了各种全面的改进。这里&#xff0c;我们关注一下在WPF应用可访问性上所做的改进。改进的设想针对领域是屏幕报读器&#xff08;Screen Reader&#xff09;和高对比度场景。Microsoft的Preeti Krishna表示&#xf…

ImageSharp一个专注于NetCore平台图像处理的开源项目

今天大家分享的是一个专注于NetCore平台图像处理的开源项目&#xff0c;老实说为这篇文章取名字想了5分钟&#xff0c;可能是词穷亦或是想更好的表达出这款开源项目的作用&#xff1b;这个项目在图像处理方面有很多功能&#xff0c;如&#xff1a;缩放&#xff0c;裁剪&#xf…

关于 JVM 内存的 N 个问题

转载自 关于 JVM 内存的 N 个问题 JVM的内存区域是怎么划分的&#xff1f; JVM的内存划分中&#xff0c;有部分区域是线程私有的&#xff0c;有部分是属于整个JVM进程&#xff1b;有些区域会抛出OOM异常&#xff0c;有些则不会&#xff0c;了解JVM的内存区域划分以及特征&am…