.net core3.1使用API网关Ocelot五:配合consul实现动态路由 电脑版发表于:2020/9/1 17:25 真正的项目中我们的服务会很多,如果一一地配置到配置文件,将会是一个巨大的工程,这个时候我们就可以让Ocelot与我们的服务发现组件consul配合了,这样也可以比较方便的实现动态路由。 实现效果:如果需要新增服务的时候,不用修改静态配置文件。ocelot自动获取consul发现的所有服务,实现集群功能。 关于consul的用法,我前面写了几篇 https://www.tnblog.net/aojiancc2/article/details/3848 下面就说一下怎么把Ocelot配合consul使用 <br/> tn3#下载与添加consul依赖 下载consul ``` install-package Ocelot.Provider.Consul -version 16.0.1 ``` 在ConfigureServices中添加consul依赖  <br/> tn3#在Ocelot全局配置中添加关于consul的配置 ``` "ServiceDiscoveryProvider": { "Host": "localhost", "Port": 8500, "Type": "Consul" } ``` 效果如下  这样就可以让Ocelot与consul结合起来了是不是很简单 <br> #####当然前提是你先要把consul正常的跑起来  比如我这里就把consul跑起来并且注入了一个服务进去 consul怎么注入服务可以参考:https://www.tnblog.net/aojiancc2/article/details/3884 #####然后我们其实就可以通过api网关去访问,服务发现中注入的接口了  可以看到服务是被成功访问的  换一个接口访问试试  也是可以的  tn3#好我说一下Ocelot结合Consul的访问规则 大家都知道,其实服务注入,服务发现就是为了降低服务之间的耦合度,可以支持动态扩容,也就是可以通过服务名拿到服务项目的具体ip与端口,这块就是叫服务发现嘛,动态扩展就是服务注入,其实也是一个整体感觉,要分开说的话可以这样理解一下。 #####所以我们访问的规则其实是: api网关地址/服务名/具体的接口地址 也就是这里的axj其实是服务名:  对应的就是服务发现的的服务名:  tn>之所以这么做其实挺好的,服务名就代表了那一块服务,然后后面接具体的接口,这样就可以很好的把api网关和服务发现结合起来了 <br> #####好了这会就写到这里了,留两个问题 1:api网关和服务发现结合后的单独特殊配置 2: 如果consul中一个服务使用了集群,是否可以直接支持负载均衡