SpringCloud微服务实战二:Spring Cloud Ribbon 负载均衡 + Spring Cloud Feign 声明式调用
1.Spring Cloud Ribbon的作用
Ribbon是Netflix开发的一个负载均衡组件,它在服务体系中起着重要作用,Pivotal将其整合成为Spring Cloud Ribbon,与其他SpringCloud组件结合可以发挥出强大作用,它的负载策略有多种,默认轮询,可配置超时重试,说到负载均衡,Ribbon与Lvs、Nginx不一样,nginx是服务端负载均衡,Ribbon是客户端负载均衡,具体表现为客户端从注册中心拿到服务的所有实例,然后以负载均衡方式去调用服务,默认以轮询的方式去调用服务实例。
2.Spring Cloud Feign的作用
Feign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用Feign, 我们可以做到使用HTTP请求远程服务时能与调用本地方法一样的编码体验,开发者完全感知不到这是远程方法,更感知不到这是个HTTP请求。
Feign原理:我们首先会添加@EnableFeignClients注解开启对 FeignClient扫描加载处理,扫描后会注入到SpringIOC容器,当定义的feign接口方法被调用时,通过JDK代理的方式,生成具体的RequestTemplate,RequestTemplate生成Request,交给URLConnection处理,并结合LoadBalanceClient与Ribbon,以负载均衡的方式发起服务间的调用
3.开始搭建
<!-- 负载均衡 (版本视自己的项目版本定)-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<!--服务消费者 Feign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
4.SpringBoot中启动类中代码
/**
* @author 陈康
* @date 2019/09/30
*/ @EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
@Configurationpublic class LzxServerConsumerMasterApplication {
/**
* 开启负载均衡
*/
@LoadBalanced
@Bean
RestTemplate restTemplate(){
return new RestTemplate();
}
5.新建一个interface作为声明式调用
/**
* @author 陈康
* @date 2019/10/10
*/
@FeignClient(value = "provider")
public interface HomeClientService { @GetMapping("/")
String consumer(); }
6.新建一个控制层调用provider中的方法
/**
* 消费者控制层
* @author 陈康
* @date 2019/10/08
*/
@RestController
public class ConsumerController { @Autowired
private HomeClientService homeClient; @GetMapping(value = "/test")
public String test(){
return homeClient.consumer();
} }
7.新建两个provider项目 (第一个)
#Eureka 相关配置
eureka:
client:
serviceUrl:
defaultZone: http://localhost:9001/eureka/,http://localhost:9002/eureka/
#服务名称
spring:
application:
name: provider
# 服务端口号
server:
port: 8001
(第二个)
#Eureka 相关配置
eureka:
client:
serviceUrl:
defaultZone: http://localhost:9001/eureka/,http://localhost:9002/eureka/
#服务名称
spring:
application:
name: provider
# 服务端口号
server:
port: 8002
pom.xml中的配置
<!--注册中心 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
两个SpringBoot启动类的代码(另一个输出为Hello World 8082)
/**
* @author 陈康
* @date 2019/09/30
*/
@RestController
@EnableEurekaClient
@SpringBootApplication
public class LzxServerProviderMasterApplication { public static void main(String[] args) {
SpringApplication.run(LzxServerProviderMasterApplication.class, args);
} @GetMapping("/")
public String home() {
return "Hello World 8081";
} }
SpringCloud微服务实战二:Spring Cloud Ribbon 负载均衡 + Spring Cloud Feign 声明式调用的更多相关文章
- 【SpringCloud微服务实战学习系列】客户端负载均衡Spring Cloud Ribbon
Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现.通过Spring Cloud的封装,可以让我们轻松地将面向服务的RES模板 ...
- SpringCloud微服务实现生产者消费者以及ribbon负载均衡
一.SpringCloud_eureka_server 1.导入依赖 <dependencies> <dependency> <groupId>junit</ ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_4-03 高级篇幅之Ribbon负载均衡源码分析实战
笔记 3.高级篇幅之Ribbon负载均衡源码分析实战 简介: 讲解ribbon服务间调用负载均衡源码分析 1.完善下单接口 2.分析@LoadBalanced ...
- Spring Cloud06: Ribbon 负载均衡
一.使用背景 前面的学习中,我们已经使用RestTemplate来实现了服务消费者对服务提供者的调用,如果在某个具体的业务场景下,对某个服务的调用量突然大幅提升,这个时候就需要对该服务实现负载均衡以满 ...
- SpringCloud学习笔记(五):Ribbon负载均衡
简介 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套 客户端 负载均衡的工具 .(重点:客户端) 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提 ...
- Spring Cloud Ribbon负载均衡
目录 一.简介 二.客户端负载均衡 三.RestTemplate详解 GET请求 POST请求 PUT请求 DELETE请求 一.简介 Spring Cloud Ribbon是一个基于HTTP 和 ...
- Spring Cloud Ribbon负载均衡(快速搭建)
Spring Cloud Ribbon 是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现.通过 Spring Cloud 的封装, 可以让我们轻松地将面向服务的 ...
- SpringCloud第二弹(高可用Eureka+Ribbon负载均衡)
先建立父工程 .. ..一路next 搭建注册中心(需要建立三个工程,端口不一样) .. .. .. 修改入口类 package com.cloud.eurekaserver1111; import ...
- SpringCloud微服务实战-Zuul-APIGateway(十)
本文转自:http://blog.csdn.net/qq_22841811/article/details/67637786#准备工作 1 API Gateway 2 Zuul介绍 2.1 zuul的 ...
随机推荐
- Django之深入了解ORM
目录 Django ORM操作 常用字段 常用字段参数 自定义字段 单表操作 双下划线查询 模糊查询 多表操作 一对多字段数据的操作 多对多字段数据的操作 跨表查询 基于对象的跨表查询 基于双下划线的 ...
- Ubuntu 快速安装配置Odoo 12
Odoo 12预计将于今年10月正式发布,这是一次大版本更新,带来了一些不错的新特性,如 文件管理系统(DMS) 用户表单中新增字段(Internal user, Portal, Public) HR ...
- LUOGU P1291 [SHOI2002]百事世界杯之旅 (期望dp)
传送门 解题思路 期望$dp$.因为这个是期望步数,所以要倒着推.那么这道题就变得一脸可做了,设$f[i]$表示还有$i$张牌没有收集的期望,那么考虑再抽一张,有$(n-i)/n$的概率抽到抽过的牌, ...
- 洛谷 2197 nim游戏
题目描述 甲,乙两个人玩Nim取石子游戏. nim游戏的规则是这样的:地上有n堆石子(每堆石子数量小于10000),每人每次可从任意一堆石子里取出任意多枚石子扔掉,可以取完,不能不取.每次只能从一堆里 ...
- js for in 和 for of 的区别
引自:http://es6.ruanyifeng.com/#docs/iterator for...of循环可以代替数组实例的forEach方法. const arr = ['red', 'green ...
- oracle日志
UTL_FILE.FOPEN(location in varchar2, filename in varchar2, open_mode in varchar2) return FILE_TYPE; ...
- kafka comsumer
kafka的顺序消费只保证在同一个partition中而已
- Cmp- Linux必学的60个命令
1.作用 cmp(“compare”的缩写)命令用来简要指出两个文件是否存在差异,它的使用权限是所有用户. 2.格式 cmp[options] 文件名 3.[options]主要参数 -l: 将字节以 ...
- gin框架中间件
1. Gin框架中间件Gin框架中间件A. Gin框架允许在请求处理过程中,加入用户自己的钩子函数.这个钩子函数就叫中间件B. 因此,可以使用中间件处理一些公共业务逻辑,比如耗时统计,日志打印,登陆校 ...
- VS未能加载文件或程序集“xxx.dll” 设置Build Events
完整错误信息:"System.IO.FileNotFoundException"类型的未经处理的异常在 未知模块 中发生 未能加载文件或程序集"Ctp.Core.dll& ...