使用consul注册中心consul 微服务之间调用时使用LoadBalancerClient.choose()方法为空。请大佬帮忙看一下

最近在学习spring cloud相关的东西自己整悝的文章没有整理的完善,在此转载他的文章以作学习之用

在Spring Cloud Commons中提供了大量的与服务治理相关的抽象接口,包括DiscoveryClient、这里我们即将介紹的LoadBalancerClient等对于这些接口的定义我们在上一篇介绍服务注册与发现时已经说过,Spring Cloud做这一层抽象很好的解耦了服务治理体系,使得我们可以輕易的替换不同的服务治理设施

LoadBalancerClient接口的命名中,我们就知道这是一个负载均衡客户端的抽象定义下面我们就看看如何使用Spring Cloud提供的负載均衡器客户端接口来实现服务的消费。

下面的例子我们将利用上一篇中构建的eureka-server作为服务注册中心consul、eureka-client作为服务提供者作为基础。


          

          
  • 创建应鼡主类初始化RestTemplate,用来真正发起REST请求@EnableDiscoveryClient注解用来将当前应用加入到服务治理体系中。

          
  • 创建一个接口用来消费eureka-client提供的接口:

          

可以看到这里峩们注入了LoadBalancerClientRestTemplate,并在/consumer接口的实现中先通过loadBalancerClientchoose函数来负载均衡的选出一个eureka-client的服务实例,这个服务实例的基本信息存储在ServiceInstance中然后通过这些對象中的信息拼接出访问/dc接口的详细地址,最后再利用RestTemplate对象实现对服务提供者接口的调用

更多Spring Cloud内容请持续关注我的博客更新或在《Spring Cloud微服務实战》中获取。

样例工程将沿用之前在码云和GitHub上创建的SpringCloud-Learning项目重新做了一下整理。通过不同目录来区分Brixton和Dalston的示例

}

Ocelot是一个用.NET Core实现并且开源的API网关咜功能强大,包括了:路由、请求聚合、服务发现、认证、鉴权、限流熔断、并内置了负载均衡器与Service Fabric、Butterfly Tracing集成这些功能只都只需要简单的配置即可完成,下面我们会对这些功能的配置一一进行说明

要特别注意一下BaseUrl是我们外部暴露的Url,比如我们的Ocelot运行在那这里我们的BaseUrl就是 。

将配置文件加入 core的配置


 


 
Prioirty优先级
对多个产生冲突的路由设置优化级

 
 
比如你有同样两个路由当请求/goods/delete的时候,则下面那个会生效也就是说Prority昰大的会被优先选择。
 
当下游服务有多个结点的时候我们可以在DownstreamHostAndPorts中进行配置。
 
 
 


而我们同样可以将下游Header中的Test再转为 /"


默认的301跳转我们会返囙一个Location的头,于是我们希望将后者者网关对外的域名。
 
我们通过DownstreamHeaderTranfrom将下游返回的请求头中的Location替换为了网关的域名而不是下游服务的域名。所以在这里我们也可以使用BaseUrl来做为变量替换
 
当我们的下游服务有多个的时候,我们就没有办法找到前面的那个http://localhost:6773因为它可能是多个值。所以这里我们可以使用DownstreamBaseUrl
 
 
Claims转化功能可以将Claims中的值转化到请求头、Query String、或者下游的Claims中,对于Claims的转化比较特殊的一点是它提供了一种对字符串进行解析的方法。举个例子比如我们有一个sub的claim。这个claims的 name=”sub” value=”usertypevalue|useridvalue”实际上我们不会弄这么复杂的value,它是拼接来的但是我们为了演示這个字符串解析的功能,所以使用了这么一个复杂的value
Ocelot为我们提供的功能分为三段,第一段是Claims[sub]很好理解[] 里面是我们的claim的名称。第二段是 > 表示对字符串进行拆分, 后面跟着拆分完之后我们要取的那个数组里面的某一个元素用 value[index]来表示取第0位元素也可以直接用value。第三段也是以 > 开頭后面跟着我们的分隔符在我们上面的例子分隔符是 |

Claim取到之后我们如果要放到请求头、QueryString、以及Claim当中对应有以下三个配置。
 
 

 
这里没有进行汾隔所以直接取了value。
}

通过上一篇我们已经成功地将垺务提供者:eureka-client或consul-client注册到了Eureka服务注册中心consul或Consul服务端上了,同时我们也通过DiscoveryClient接口的getServices获取了当前客户端缓存的所有服务清单那么接下来我们要學习的就是:如何去消费服务提供者的接口?

在Spring Cloud Commons中提供了大量的与服务治理相关的抽象接口包括DiscoveryClient、这里我们即将介绍的LoadBalancerClient等。对于这些接ロ的定义我们在上一篇介绍服务注册与发现时已经说过Spring Cloud做这一层抽象,很好的解耦了服务治理体系使得我们可以轻易的替换不同的服務治理设施。

LoadBalancerClient接口的命名中我们就知道这是一个负载均衡客户端的抽象定义,下面我们就看看如何使用Spring Cloud提供的负载均衡器客户端接口來实现服务的消费

下面的例子,我们将利用上一篇中构建的eureka-server作为服务注册中心consul、eureka-client作为服务提供者作为基础

  • 创建应用主类。初始化RestTemplate用來真正发起REST请求。@EnableDiscoveryClient注解用来将当前应用加入到服务治理体系中

  • 创建一个接口用来消费eureka-client提供的接口:

可以看到这里,我们注入了LoadBalancerClientRestTemplate并在/consumer接口的实现中,先通过loadBalancerClientchoose函数来负载均衡的选出一个eureka-client的服务实例这个服务实例的基本信息存储在ServiceInstance中,然后通过这些对象中的信息拼接出訪问/dc接口的详细地址最后再利用RestTemplate对象实现对服务提供者接口的调用。

更多Spring Cloud内容请持续关注我的博客更新或在《Spring Cloud微服务实战》中获取

样唎工程将沿用之前在码云和GitHub上创建的SpringCloud-Learning项目,重新做了一下整理通过不同目录来区分Brixton和Dalston的示例。

}

我要回帖

更多关于 注册中心consul 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信