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. Redis设计与实现 (三): 字典

     哈希表 结构定义dict.h/dictht /* * 哈希表 * * 每个字典都使用两个哈希表,从而实现渐进式 rehash . */ typedef struct dictht { // 哈希表数 ...

  2. Java泛型小记

    Automobile类: public class Automobile { private String name; public Automobile(String name){ this.nam ...

  3. 利用Github免费搭建个人主页(个人博客)

    之前闲着, 利用Github搭了个免费的个人主页. 涉及: Github注册 Github搭建博客 域名选购 绑定域名 更多 一  Github注册 在地址栏输入地址:http://github.co ...

  4. java多线程:线程体往外抛出异常的处理机制实践

    1当线程的线程体内部无捕获异常,将异常抛出线程体外,不同情况下,程序处理机制 测试类 package com.ehking.bankchannel.domesticremit.facade.impl; ...

  5. Android中的基类—抽取出来公共的方法

    在Android中,一般来说一个应用会存在几十个页面,并且一个应用一般也会使用一个特定的主题,其中的页面的风格也是一致的,并且页面中的动画效果.页面的切换效果等也应该保持同样的风格,那么就需要一个基类 ...

  6. 使用resteasy作为dubbox消费者

    dubbox服务提供者是REST风格的,消费者可能是从dubbox过来的,也可能是从第三方外部系统过来的.后者的话我们没得选,只能以服务提供者直连,服务治理平台和监控中心手再长,也管不到别人的地盘.但 ...

  7. laravel 网站速率优化

    https://segmentfault.com/a/1190000009954966

  8. Crypto 加密解密

    import binascii from Crypto.Cipher import AES #秘钥,此处需要将字符串转为字节 from utils import config from utils.e ...

  9. TCP/IP/HTTP

    一.什么是TCP连接的三次握手 第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1 ...

  10. TI技术官方论坛

    https://e2echina.ti.com/question_answer/dsp_arm/c6000_dsp/f/32/t/172279