Ribbon重要知识点,开发过程中遇到的问题和如何解决

因为我们的JWT令牌在Othou2生成时通过非对称加密(用的时keyPair)
服务网关需要在启动的时候通过ribbon去授权中心拉取我们的JWT的密钥
为什么网关一定要在启动时拿密钥?逻辑决定的,该密钥必须在所有逻辑之前得到,所以用了initializabean
也就是通过一个网关全局过滤器类(实现了GlobalFilter类,也实现了initializabean,在Bean初始化时实现了afterPropertiesSet方法,在该方法中提前拿到JWT的密匙,再去用该密钥去和token字符串去对比,验证token是否有效。)注入RestTemplate,但是在启动消费者服务时,会报错,报找不到生产者服务异常。。

问题出在哪儿呢?为什么拿不到呢
Ribbon工作原理就是在RestTemplate里面注入我们的LoaderBanlanceClient
LoaderBanlanceClient在什么时候塞到RestTemplate里面?
是一个定制器将Client塞入到RestTemplate,那么这个定制器是什么时候执行的呢?

通过分析spring源码得知:
定制器塞负载均衡client的时机是晚于全局过滤器类实例化的时间,因此,此时的RestTemplate中并没有LBclient,自然就无ribbon的功能。

解决方案,自己写一个RestTemplate,自己实现负载均衡
不管是Get 或者是post方法,都会调用doExecute()方法,继承RestTemplate重写doExecute方法即可
在真正调用过程中 将product-center给换了 怎么做到的 通过discoveryClient(做服务发现的类)
从url将服务名取出来和请求路径解析出来,再把服务名 换成对应的ip

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值