ocelot和nginx比较_庐山真面目之四微服务架构Consul和Ocelot简单版本实现

一、简介

在上一篇文章《庐山真面目之三微服务架构Consul简单版本实现》中,我们已经探讨了如何搭建基于Consul组件的微服务架构,可能很多人感觉很简单。没错,的确很简单,因为我的每篇文章只会解决一个问题,这样更单纯、更精准。如果我们把所有的东西都放在一篇文章里,太多了,不利于学习和查看。我们通过上一篇文章可知,在客户端访问 Consul 组件管理的业务服务实例是多么的麻烦,需要自己写代码实现。项目少,无所谓,只要项目一大,或者项目多了,规模大了,都会对管理和维护带来很大的挑战,毕竟,人喜欢操作简单的东西,想抬杠的免开尊口,主要是没必要。今天我们就解决客户端手写调用策略的问题。

1、说明

我先说明一下,这个实现的版本只过是测试版本,以后会把相关的技术点都增加上去,我们一步一步的演化而来,如果是大牛,就可以直接跳过,因为这些东西相对于您来说,这个太简单了。特别说明,这里的所有代码都经过测试,所以大家可以放心使用。

2、开发环境*以下就是开发环境,不用多说,都很简单,一看就知道。

(1)、开发工具:Visual Studio 2019

(2)、开发语言:C#

(3)、开发平台:Net Core3.1,跨平台。

(4)、服务注册:Consul,服务注册、发现中心

(5)、网关服务:Ocelot 开源组件,负载均衡,服务治理。

(6)、操作系统:Windows 10,64bit。

3、我们的目标

今天我们要解决的问题是如何做到服务实例调用策略不许要手写,并且还能实现负载均衡,其他问题,比如:Consul 本身的集群的问题暂时就不考虑,我们会一步一步的演变下去。

image

二、Consul注册、发现服务组件的简介。

image 在这里我们只是做简单的介绍,不会详细讨论它的所有技术点,没有那么大的篇幅,再说这样做也就跑题了。如果大家想去学习Consul的有关内容,地址我已经贴出来了,大家可以自行恶补。

Consul是一个服务网格(微服务间的 TCP/IP,负责服务之间的网络调用、限流、熔断和监控)解决方案,它是一个一个分布式的,高度可用的系统,而且开发使用都很简便。它提供了一个功能齐全的控制平面,主要特点是:服务发现、健康检查、键值存储、安全服务通信、多数据中心。

上面的一幅图就说明了Consul的工作原理。S-A是使用服务的客户端,他不用关系有多少个服务,只要它需要的时候,他就会向Consul服务中心发出请求,Consul中心就会把和服务名称(在Consul中的名称,也可以说是服务的类别名称)匹配的、在此注册的所有服务实例的地址信息全部返回给S-A客户端,然后客户端,可以根据自己的情况,决定调用的具体策略,可以轮训、可以权重、可以随机,当然其他方式也可以,但是这些工作必须由使用服务的客户端S-A自行解决。

S-B-1、S-B-2、S-B-3等是在Consul中心注册的服务实例,包括服务实例的地址、端口号、ID名称、服务类别名称等信息。这些服务实例,每个服务实例都有自己的ID名称,多个服务实例可以取一个相同的名称,其实,这个名称是用于分类的。Consul中心查找的时候就是通过这个名称来查找的。这些服务实例,在应用程序一开始的时候就开始注册,并且只注册一次。

所有的服务实例都注册成功了,时间一分一秒的过去,一个小时之后或者一段时候之后服务还存在吗?我们如何判断呢?这就涉及到我们要谈的第三个方面,健康监测,英文叫:Health Check。Consul中心为我们提供了现成的接口,可以定义针对服务的健康检查,这个健康检查是一个完整的策略,包括:如果检查失败,多久注销服务;服务检查的时间间隔;还有调用检查的超时时间等。这样就能为我们提供一个比较完备的服务注册、发现和检测的解决方案。

**总结如下:

1****、服务自动注册,可以发现新服务。

2****、健康检测,可以过滤掉线服务。

3****、客户端要完成服务调用逻辑,比较麻烦,没有Nginx ****方便。**

三、Ocelot服务组件简介。

image    今天要给大家介绍的Ocelot是一个基于 .net core的开源WebAPI服务网关项目,它的功能非常强大,包括了路由、请求聚合、服务发现、认证鉴权、限流、负载均衡等功能。而这些功能都可以直接通过修改json配置文件即可使用,非常方便。Ocelot是系统中对外暴露的一个请求入口,所有外部接口都必须通过这个网关才能向下游API发出请求,就如地铁中的安检系统,所有人都必须经过安检才能乘坐地铁。

当然了,我今天肯定也不会对Ocelot服务组件进行详细的讨论,它有官网和详细的文档,如果想看它的源码也是没有问题的,因为它是开源的。如果大家想去学习的话,可以直接点击我贴出的连接。

官网:[https://threemammals.com/ocelot](https://threemammals.com/ocelot)

四、微服务架构Consul和Ocelot版本实现

上一篇文章我们解决了业务服务实例的发现和注册问题,当然也有健康检查,可以做到服务实例的动态伸缩。非常给力,也非常兴奋,因为我们又战胜了一个问题,做技术的人员都懂我说的意思。兵来将挡水来土掩,今天我们要解决手写代码去实现服务实例的调用策略。废话少说,我们开始吧。

**   1****、下载 Consul ****服务组件。**

官网下载:https://www.consul.io/downloads

image

Consul下载成功后,放在没有包含中文的目录里面,这是我的个人的习惯。

我的运行目录:D:\Programs\MicroServices\Consul_1.8.4_windows_amd64

![image](https://upload-images.jianshu.io/upload_images/22840365-aa15798ec1bd5224.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

**2****、配置 Consul ****服务组件。**

切换到当前目录,执行如下命令:Consul agent –dev

![image](https://upload-images.jianshu.io/upload_images/22840365-d252a16762a8f77d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

我们也可以通过浏览器查看 Consul服务中心是否启动成功,地址:[http://localhost:8500](http://localhost:8500/),如果成功,效果如下:

![image](https://upload-images.jianshu.io/upload_images/22840365-834c2fb06f2c4d7f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

**3****、建立项目,并为项目引入 Consul****包。**

**(1)、PatrickLiu.MicroService.Client(ASPNETCORE MVC),客户端项目。**

![image](https://upload-images.jianshu.io/upload_images/22840365-72cdccbeda6ad054.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

代码如下:

【1】、HomeController.cs的代码

[

复制代码

](javascript:void(0); "复制代码")

 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Net.Http; 5 using Consul; 6 using Microsoft.AspNetCore.Mvc; 7 using Microsoft.Extensions.Logging; 8 using PatrickLiu.MicroService.Interfaces; 9 using PatrickLiu.MicroService.Models; 10

11 namespace PatrickLiu.MicroService.Client.Controllers 12 { 13 public class HomeController : Controller 14 { 15 private readonly ILogger _logger; 16 private readonly IUserService _userService; 17

18 ///

19 /// 初始化该类型的新实例。 20 ///

21 /// 注入日志对象。

22 /// 注入用户服务对象。

23 public HomeController(ILogger logger, IUserService userService) 24

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值