网关Ocelot功能演示安排的明明白白~~~ (2)

遇到这种情况可以调整配置位置来满足需求,但明显不合理,Ocelot提供优先级(Priority)的配置,配置的值越大就越优先匹配,默认所有配置的路由优先级的值为0;如下配置可以满足需求:

路由优先级

在配置文件中可以配置万能模板,即所有请求都会匹配到该路由模板,但其优先级为最低,如果能匹配到其他模板,优先走其他路由,万能模板配置如下:

万能模板

1.3 区分匹配路由大小写

默认情况下,匹配路由是不区分大小写的;其实在实际过程中我们通常也不需要区分;但在一些应用场景要求区分大小,那就可以增加"RouteIsCaseSensitive": true配置即可。

2. 路由聚合

路由聚合就是可以将多个一般的路由(上面配置的路由就是)聚合在一起,然后将多个路由响应的结果统一返回给调用方;如下配置

image-20210402123033237

配置说明:

路由配置中增加了Key,给需要聚合的路由分别配置一个不重复的Key值;

在配置文件中增加Aggregates节点,这个节点和Routes节点是同级的;然后在里面的RouteKeys中配置需要聚合的路由Key,然后再配置一个上游模板路径,配置上游模板路径时同样可以传递参数,如上图所示;

运行结果:

image-20210402123819897

其实在刚开始直接返回字符串时(通常都是是返回Json,只是这里演示遇到了不规范情况,刚好可以说说),返回的结果并不是真正的Json字符串,这样可能前端解析就会出问题,所以需要处理一下返回结果;

如果不处理,就会出现如下情况:

返回结果不对

上图中在没处理之前,网关是直接将结果进行拼接,但最后整体不符合Json格式,JsonView就报错啦!!!

解决措施就是将字符串以Json的形式返回即可,简单的处理方式如下:

优化之后

上面的聚合演示是默认情况,Ocelot提供自定义聚合器的功能(继承IDefinedAggregator接口),并注册相关服务,然后在配置文件指定自定义的聚合器即可,如下(具体细节请详见官网):

image-20210402124814838

具体实现这里就不再演示了,好像自定义聚合器功能用的不太多,通常大家的做法是单独做一个后台聚合服务,若需要聚合数据,从聚合服务中获取即可;

3. 集成Consul做服务发现

如果还是通过配置文件一个一个的配置路由,是不是也太不给力啦,如果能和Consul结合,岂不是完美~~~

3.1 先把Consul集成到网关项目中

引入Ocelot.Provider.Consul,并在ConfigureServices中注册相关服务组件;

image-20210402134110433

3.2 在配置文件中增加Consul相关配置;

image-20210402223213939

配置文件说明:

GlobalConfiguration:全局配置,其实可以理解为所有路由共用的配置放在这;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wppgpf.html