


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