1 远程服务资源的调用

  1.1 古老的套路

    在微服务出现之前,所有的远程服务资源必须通过RestTemplate或者HttpClient进行;但是这两者仅仅实现了远程服务资源的调用,并未提供负载均衡实现,所以程序员必须自己实现负载均衡功能;而且当远程服务是集群部署时,利用RestTemplate或者HttpClient封装的客户端必须配置好远程服务的先关信息。

    技巧01:利用Spring5.X 提供的WebClient可以实现响应式访问远程服务资源

      技巧02:利用RestTemplate和WebClient封装客户端的参考博文:参考博文01  参考博文02  

    缺点01:需要自己实现负载均衡功能

    绝点02:封装客户端时必须配置好远程服务的信息,如果远程服务是集群部署时工作量时巨大的;而且一旦远程服务信息变动,客户端也必须进行变动

  1.2 微服务套路

    微服务出现过后,封装的客户端不需要配置远程服务的信息,因为这些信息都有注册中心统一帮我们进行管理,也不需要自己实现负载均衡功能;基于SpringCloud的微服务之间的通讯方式主要通过 ribbon + restTemplate 或者 feign 实现

    技巧01:利用 ribbon + restTemplate 实现时其实和只用RestTemplate实现的区别就在于不用配置远程服务的信息,而且提供了负载均衡功能

    技巧02:ribbon 负责获取注册中心的远程服务信息以及提供负载均衡功能

2 Ribbon知识点

  daigengxin.......

3 Feign知识点

  待更新........

4 项目准备

  4.1 注册中心 Eureka Server

    创建一个单例的服务注册中心

  4.2 服务提供者 Eureka Client

  4.3 服务消费者 Eureka Client

5 利用 Ribbon + RestTemplate 实现

  利用 Ribbon + RestTemplate 调用远程服务资源

  技巧01:先启动服务注册中心

  5.1 创建远程服务Restful API

    在服务提供的服务中提供一个Restful API接口供服务消费方调用

  5.2 集群部署服务提供方

    将服务提供方打包后在不同的端口启动即可,本案例直接利用IDEA进行集群部署

    5.2.1 打开应用配置

    5.2.2 复制一份原来的配置

    5.2.3 修改配置信息

      只需要修改配置名称和启动端口即可

    5.2.4 分别启动两个配置即可

      技巧01:每个配置启动前可以修改相关的内容信息,这样做的目的是为了开发阶段可以看到效果;生产中时不能更改内容信息的,因为时集群嘛,内容肯定需要保持一致

      技巧02:如果项目中利用了devtools依赖,请注释掉,并关闭IDEA的自动编译功能

    5.2.5 到注册中心控制面板查看信息

      可以看到一个应用在两个端口启动了

    5.2.6 分别访问restful API

  5.3 编写远程调用控制类

    在服务消费方利用RestTemplate调用服务提供方提供的资源数据,参考文档

    》配置RestTemplate的Bean

    》利用RestTemplate调用

      技巧01:远程服务的信息直接利用远程服务的应用名代替,应用名就是spring.application.name的值

  5.4 通过消费者服务调用远程资源测试

    技巧01:ribbon默认使用轮询来实现负载均衡功能

6 利用 Feign 实现

  技巧01:feign默认集成了ribbon

  技巧02:在需要使用feign的服务中需要引入feign依赖并在启动类上添加@EnableFeignClients注解

        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

  6.1 创建远程服务Restful API

    请参见5.1

  6.2 编写远程调用接口

  6.3 编写远程调用的控制层

  6.4 通过消费者服务调用远程资源测试

  6.5 熔断

    参考博文

7 本博文源代码

  点击前往

  

SpringCloud03 Ribbon知识点、 Feign知识点、利用RestTemplate+Ribbon调用远程服务提供的资源、利用feign调用远程服务提供的资源、熔断的更多相关文章

  1. 服务消费者(RestTemplate+Ribbon+feign)

    负载均衡 ​ spring cloud 体系中,我们知道服务之间的调用是通过http协议进行调用的.注册中心就是维护这些调用的服务的各个服务列表.在Spring中提供了RestTemplate,用于访 ...

  2. SpringCloud学习系列之二 ----- 服务消费者(Feign)和负载均衡(Ribbon)使用详解

    前言 本篇主要介绍的是SpringCloud中的服务消费者(Feign)和负载均衡(Ribbon)功能的实现以及使用Feign结合Ribbon实现负载均衡. SpringCloud Feign Fei ...

  3. SpringCloud(三):服务消费以及负载均衡(RestTemplate+Ribbon)

    一.什么是Ribbon: Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法. 将Netflix的中间层服务连接在一起.Ribbon客户端组件提供一系列完善的配置项如连 ...

  4. spring cloud微服务快速教程之(三)声明式访问Feign、负载均衡Ribbon

    0-前言 eureka实际上已经集成了负载均衡调度框架Ribbon: 我们有了各个微服务了,那怎么来调用他们呢,一种方法是可以使用 RestTemplate(如:String str= restTem ...

  5. Spring Cloud 之 Feign 知识点:封装了 REST 调用

    Feign Client 会在底层根据你的注解,跟你指定的服务建立连接.构造请求.发起请求.获取响应.解析响应,等等. Feign 的一个关键机制就是使用了动态代理. 首先,如果你对某个接口定义了 @ ...

  6. 利用RestTemplate进行http调用

    在对接API的时候,会涉及调用第三方的服务,这时候可以利用RestTemplate进行调用,下面给大家展示一个简单的调用demo. package com.tanlu.user.api.control ...

  7. Spring Cloud ZooKeeper集成Feign的坑2,服务调用了一次后第二次调用就变成了500,错误:Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.n

    错误如下: 2017-09-19 15:05:24.659 INFO 9986 --- [ main] s.c.a.AnnotationConfigApplicationContext : Refre ...

  8. 调用链系列三、基于zipkin调用链封装starter实现springmvc、dubbo、restTemplate等实现全链路跟踪

    一.实现思路 1.过滤器实现思路 所有调用链数据都通过过滤器实现埋点并收集.同一条链共享一个traceId.每个节点有唯一的spanId. 2.共享传递方式 1.rpc调用:通过隐式传参.dubbo有 ...

  9. 利用JavaScriptSOAPClient直接调用webService --完整的前后台配置与调用示例

    JavaScriptSoapClient下载地址:https://archive.codeplex.com/?p=javascriptsoapclient JavaScriptSoapClient的D ...

随机推荐

  1. Ubuntu 16.04 为 PHP7 添加 memcached 以及 redis 扩展

    切换到 PHP 7 之后,网站的速度大幅提升,不过通常的扩展可能某一个就还没有支持 PHP7 Memcached 比如说我现在使用了最新的 Ubuntu 16.04,虽然内置了 PHP 7 源,但 m ...

  2. springboot 自定义属性

    前言 spring boot使用application.properties默认了很多配置.但需要自己添加一些配置的时候,我们如何添加呢 1.添加自定义属性 在src/main/resources/a ...

  3. 在vue项目中正确的引入jquery和bootstrap

    <script>标签引入jquery在vue脚手架里并不适用,需要利用webpack引入jquery 一.第一种方法 1:因为已经安装了vue脚手架,所以需要在webpack中全局引入jq ...

  4. 对Tornado异步操作Sqlalchemy方法的选定 不错

    使用原因 在一个实时通讯的项目中,由于需要使用Websocket这一协议,便在Python框架中选定了Tornado,也同时使用了Sqlalchemy这一ORM框架. 大家都知道Tornado有异步非 ...

  5. HttpModule和HttpHandler -- 系列文章

    ASP.NET 生命周期 在ASP.Net2.0中使用UrlRewritingNet实现链接重写 IHttpModule实现URL重写 使用IHttpHandler防盗链 HttpModule,Htt ...

  6. vba传递参数类型错误

    先来看看微软官方的说明: 目录内容 概要 解决方案 详细信息 重现问题的步骤 &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp; ...

  7. bzoj 3501 PA2008 Cliquers Strike Back——贝尔数

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3501 用贝尔三角形 p^2 地预处理 p 以内的贝尔数.可以模(mod-1)(它是每个分解下 ...

  8. slabtop 监控实时内核片缓存信息

                                        使用 slabtop命令监控实时内核片缓存信息                                 默认情况下,sl ...

  9. C#将字符串数组转换为以逗号分隔的字符串

    , tyt, gff }; string str=string.Join(",",array);

  10. AppCan上下拉列表刷新

    function initBounce(funcTop, funcBottom){ uexWindow.setBounce("1"); if (!funcTop && ...