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

6.5 熔断
7 本博文源代码

SpringCloud03 Ribbon知识点、 Feign知识点、利用RestTemplate+Ribbon调用远程服务提供的资源、利用feign调用远程服务提供的资源、熔断的更多相关文章
- 服务消费者(RestTemplate+Ribbon+feign)
负载均衡 spring cloud 体系中,我们知道服务之间的调用是通过http协议进行调用的.注册中心就是维护这些调用的服务的各个服务列表.在Spring中提供了RestTemplate,用于访 ...
- SpringCloud学习系列之二 ----- 服务消费者(Feign)和负载均衡(Ribbon)使用详解
前言 本篇主要介绍的是SpringCloud中的服务消费者(Feign)和负载均衡(Ribbon)功能的实现以及使用Feign结合Ribbon实现负载均衡. SpringCloud Feign Fei ...
- SpringCloud(三):服务消费以及负载均衡(RestTemplate+Ribbon)
一.什么是Ribbon: Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法. 将Netflix的中间层服务连接在一起.Ribbon客户端组件提供一系列完善的配置项如连 ...
- spring cloud微服务快速教程之(三)声明式访问Feign、负载均衡Ribbon
0-前言 eureka实际上已经集成了负载均衡调度框架Ribbon: 我们有了各个微服务了,那怎么来调用他们呢,一种方法是可以使用 RestTemplate(如:String str= restTem ...
- Spring Cloud 之 Feign 知识点:封装了 REST 调用
Feign Client 会在底层根据你的注解,跟你指定的服务建立连接.构造请求.发起请求.获取响应.解析响应,等等. Feign 的一个关键机制就是使用了动态代理. 首先,如果你对某个接口定义了 @ ...
- 利用RestTemplate进行http调用
在对接API的时候,会涉及调用第三方的服务,这时候可以利用RestTemplate进行调用,下面给大家展示一个简单的调用demo. package com.tanlu.user.api.control ...
- 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 ...
- 调用链系列三、基于zipkin调用链封装starter实现springmvc、dubbo、restTemplate等实现全链路跟踪
一.实现思路 1.过滤器实现思路 所有调用链数据都通过过滤器实现埋点并收集.同一条链共享一个traceId.每个节点有唯一的spanId. 2.共享传递方式 1.rpc调用:通过隐式传参.dubbo有 ...
- 利用JavaScriptSOAPClient直接调用webService --完整的前后台配置与调用示例
JavaScriptSoapClient下载地址:https://archive.codeplex.com/?p=javascriptsoapclient JavaScriptSoapClient的D ...
随机推荐
- IntelliJ IDEA下SVN配置及使用
一.在IDEA中使用SVN,首先需要下载安装 TortoiseSVN 插件. 打开 TortoiseSVN 下载地址,选择适合自己的系统类型下载. 接下来,进行安装即可.选择Modify,默认 com ...
- Stars
Astronomers often examine star maps where stars are represented by points on a plane and each star h ...
- poj 3590 The shuffle Problem——DP+置换
题目:http://poj.org/problem?id=3590 bzoj 1025 的弱化版.大概一样的 dp . 输出方案的时候小的环靠前.不用担心 dp 时用 > 还是 >= 来转 ...
- INSTALL_FAILED_SHARED_USER_INCOMPATIBLE的问题
eclipse编译出来的apk,安装时报出INSTALL_FAILED_SHARED_USER_INCOMPATIBLE的错误. 原因:apk的AndroidManifest.xml中声明了andro ...
- Git&Repo 命令大全 ***
首先理解几个基本概念: origin:默认远程版本库: master:默认开发分支: 查看本地更新状态: git status jiangzhaowei@ubuntu$ git status # On ...
- 把OnDraw和OnPaint弄清楚(转贴)
OnDraw()和OnPaint()兄弟 经常有朋友问雷神这样的问题:我在视图画的图象或者文字,当窗口改变后为什么不见了?OnDraw()和OnPaint()两个都是解决上面的问题,有什么不同? 雷神 ...
- gen_server模块
转自http://www.xuebuyuan.com/2132233.html
- php小白和菜鸟 上班路上可以看的修行博客
上班地铁 公交上我们不要去追剧 不要去打游戏 不要看看有效性的海量新闻, 我们需要去技术博客里遨游, 下面就推荐点与php有关的可以学习的技术博客; 大部分程序员在自学的道路上不知道走了多少坑,这个视 ...
- CodeReview是开发中的重要一个环节,整理了一些关于jupiter for java
什么是代码评审(CodeReview)? 代码评审也称代码复查,是指通过阅读代码来检查源代码与编码标准的符合性以及代码质量的活动. Jupiter提供了代码行级别的评审批注功能,方便评审参与人了解具体 ...
- 字符串转换为字典的函数eval(字符串)
首先把多行的字符串,变成一个字符串,用'''和'''扩起来: 然后把这个字符串,赋值给b 这个时候,b根本调不出来,也用不起来: 用eval(b),来格式化字符串变成字典: 然后b就变成了一个字典: