SpringCloud03 Ribbon知识点、 Feign知识点、利用RestTemplate+Ribbon调用远程服务提供的资源、利用feign调用远程服务提供的资源

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 通过消费者服务调用远程资源测试

7 本博文源代码

  点击前往

  

原文地址:https://www.cnblogs.com/NeverCtrl-C/p/9537751.html

时间: 2024-10-02 19:28:35

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

11、RestTemplate+Ribbon整合断路器Hystrix

在微服务架构中,根据业务需求拆分成一个个的微小服务,然后服务与服务之间可以相互RPC远程调用.在Spring Cloud可以使用RestTemplate+Ribbon或者Feign来进行RPC远程调用.为了保证服务高可用性,单个服务通常会进行集群部署.由于网络原因或者自身的原因,服务并不能保证百分之一百可用,如果服务方出现问题,调用这个服务就会出现线程阻塞,此时若有出现大量请求,导致服务方瘫痪.这时断路器就派上用场了.当对某个服务的调用的不可用达到一个阀值(Hystric 默认是5秒20次) 断

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 : Refreshing org.spring[email protected]56528192: startup date [Tue Sep 19 15:05:24 CST 2017]; root of context hierarchy 2017-09-19 15:05:24.858 INFO 9986 --

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

JavaScriptSoapClient下载地址:https://archive.codeplex.com/?p=javascriptsoapclient JavaScriptSoapClient的Demo实例:  http://www.guru4.net/articoli/javascript-soap-client/demo/en.aspx 利用JavaScript SOAP Client直接调用webService --完整的前后台配置与调用示例 2013年01月04日 17:15:32

利用alias命令别名对常用运维命令的调用 (给命令起别名)

利用alias命令别名对常用运维命令的调用 在~目录下,修改.bashrc,对进入ezsonar.对应log目录的命令进行别名 [[email protected] ~]# vi .bashrc # .bashrc # User specific aliases and functions alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' alias l='ls -al' alias ez='cd /usr/local/ezsonar/' al

SpringCloud系列五:Ribbon 负载均衡(Ribbon 基本使用、Ribbon 负载均衡、自定义 Ribbon 配置、禁用 Eureka 实现 Ribbon 调用)

1.概念:Ribbon 负载均衡 2.具体内容 现在所有的服务已经通过了 Eureka 进行了注册,那么使用 Eureka 注册的目的是希望所有的服务都统一归属到 Eureka 之中进 行处理,但是现在的问题,所有的微服务汇集到了 Eureka 之中,而客户端的调用也应该通过 Eureka 完成.而这种调用就可以利用 Ribbon 技术来实现. Ribbon 是一个服务调用的组件,并且是一个客户端实现负载均衡处理的组件.服务器端实现负载均衡可以使用 Nginx. HAProxy.LVS 等. 2

利用模板导出文件(二)之jacob利用word模板导出word文件(Java2word)

先下载jacob.jar包. 解压后将jacob.dll放到windows/system32以下或\jre\bin以下. 将jacob.jar增加项目. 这样项目的环境基本上搭建完毕,接下来就是书写相关的代码: /** * 传入数据为HashMap对象,对象中的Key代表word模板中要替换的字段.Value代表用来替换的值. * word模板中全部要替换的字段(即HashMap中的Key)以特殊字符开头和结尾. * 如:$code$.$date$--.以免执行错误的替换. * 全部要替换为图片

高校信息化建设发展方向——资源利用

高校信息化发展现状 1.大部分高校现在都已经完成了站群平台的搭建:即以门户网站为主站,院系为子站的平台模式: 2.每个高校都有一部分资源,包括视频.文件(PDF.Word.PPT等).图片.软件等等,但是这个资源分别存储在不同的系统内:比如视频可能存放在CMS中,也可能存放在VMS中:文件和图片也有一样的问题,这些资源独立分散的存放在各个平台中: 3.以数字化校园为基础建设统一身份认证平台,仅提供了各个系统之间的单点登录,数据和业务上的交换并没有深度的进行开发: 4.门户仅能提供信息服务,资源利

opencv利用hough概率变换拟合得到直线后,利用DDA算法得到直线上的像素点坐标

图片霍夫变换拟合得到直线后,怎样获得直线上的像素点坐标? 这是我今天在图像处理学习中遇到的问题,霍夫变换采用的概率霍夫变换,所以拟合得到的直线信息其实是直线的两个端点的坐标,这样一个比较直接的思路就是利用DDA算法来获取. 一.算法简介 DDA算法是计算机图形学中最简单的绘制直线算法.其主要思想是由直线公式y = kx + b推导出来的. 我们已知直线段两个端点P0(x0,y0)和P1(x1,y1),就能求出 k 和 b . 在k,b均求出的条件下,只要知道一个x值,我们就能计算出一个y值.如果

249 递归:概念,利用递归求1~n的阶乘,利用递归求斐波那契数列,利用递归遍历数据

6.1什么是递归 递归:如果一个函数在内部可以调用其本身,那么这个函数就是递归函数. 简单理解: 函数内部自己调用自己, 这个函数就是递归函数 注意:递归函数的作用和循环效果一样,由于递归很容易发生"栈溢出"错误(stack overflow),所以必须要加退出条件return. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"&g