springcloud笔记3:Ribbon和负载均衡,Feign
2020-07-18 04:22
344 查看
使用Ribbon:实现客户端对服务器端的访问。
1.确定服务提供者spring-cloud-provider-dept-8001和消费者consumer-dept-80中导入的有Eureka和Ribbon的包
provider->pom.xml
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>1.4.7.RELEASE</version> </dependency>
consumer->pom.xml
<!-- ribbon负载均衡--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> <version>2.2.3.RELEASE</version> </dependency> <!-- Eureka注册--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>1.4.7.RELEASE</version> </dependency>
2.编写配置文件
server: port: 80 #Eureka配置 eureka: client: service-url: defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka register-with-eureka: false #不向eureka中注册自己
3.开启注解
@SpringBootApplication @EnableEurekaClient//开启Ribbon public class DeptConsumer_80 { public static void main(String[] args) { SpringApplication.run(DeptConsumer_80.class,args); } }
4.把restTemplate的前缀地址改成Eureka中心实例名。
DeptConsumerController.java
// private static final String REST_URL_PREFIX = "http://localhost:8001"; // 把这里写成服务提供方配置的spring.name,也是在Eureka中注册的实例地址,应该是变量,通过服务器提供方的注册地址去找. //注意:要加http:// private static final String REST_URL_PREFIX = "http://springcloud-provider-dept";
模拟多服务器,多数据库运行
1.复制三份相同数据库,名称不同。
2.复制多个服务提供者springcloud-provider-dept-8001/8002/8003…
需要修改的地方:
application.yml中的port和数据库名称,和主启动类的名称!
server: port: 8003 #mybatis的配置 mybatis: type-aliases-package: com.aruiea.pojo config-location: classpath:mybatis/mybatis-config.xml mapper-locations: classpath:mybatis/mapper/*.xml # spring的配置 spring: application: name: springcloud-provider-dept #三个服务的名称一致是进行负载均衡的基础 datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/db03?useUnicode=true&serverTimezone=GMT&characterEncoding=UTF-8 username: root password: 123456 #Eureka配置,服务注册到哪里 eureka: client: service-url: defaultZone: http://localhost:7001/eureka/,http://localhost:7002/eureka/,http://localhost:7003/eureka/ instance: instance-id: springcloud-provider-dept8003 #修改eureka上默认实例的描述 #info配置 info: app.name: aruiea-springcloud company.name: blog.aruieaStudy.com
//主启动器 @SpringBootApplication @EnableEurekaClient//服务启动后,自动注册到Eureka中。默认和服务注册中心是CS关系。 @EnableDiscoveryClient//开启服务发现。 public class DeptProvider_8003 { public static void main(String[] args) { SpringApplication.run(DeptProvider_8003.class,args); } }
3.启动Eureka,访问实现轮询。
不能轮询
PS:是因为mapper.xml中指定了数据库(不指定数据库即可)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.aruiea.dao.DeptDao"> <insert id="addDept" parameterType="Dept"> insert into dept(dname,db_source) values (#{dname},DATABASE()); </insert> <select id="queryDeptById" resultType="Dept" parameterType="Long"> select * from dept where deptno = #{deptno}; </select> <select id="queryAll" resultType="dept"> select * from dept; </select> </mapper>
自定义负载均衡算法
新建一个AruieaRule类
@Configuration //自定义负载均衡 public class AruieaRule { //配置负载均衡实现RestTemplate //IRule接口 //子类:RoundRobinRule轮询 //RandomRule 随机 //AvailabilityFilteringRule:过滤掉所有跳闸,访问故障的,对剩下的轮询 //RetryRule:先按照轮询获取服务,获取失败就重试 @Bean public IRule myRule(){ return new RandomRule(); } }
就可以了!!!
重点:
RestTemplate可以访问获得远程服务器访问地址,负载均衡的开启注解就在这里。@LoadBalance
ConfigBean
@Configuration public class ConfigBean { // 把新的类托管到spring中,然后通过autowired注入使用 @Bean @LoadBalanced //Ribbon的使用 public RestTemplate getRestTemplate(){ return new RestTemplate(); } }
也可以在启动类上加入自己配置的其他Ribbon配置。
@SpringBootApplication @EnableEurekaClient//开启ribbon //微服务启动时,就导入我们配置的Ribbon配置文件 @RibbonClient(name = "SPRINGCLOUD-PROVIDER-DEPT",configuration = AruieaRule.class) public class DeptConsumer_80 { public static void main(String[] args) { SpringApplication.run(DeptConsumer_80.class,args); } }
Feign实现负载均衡
1.导入Feign启动包
springcloud-api和consumer客户端pom.xml下。
<!-- 导入Feign--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> <version>1.4.6.RELEASE</version> </dependency>
2.新建包和类。
springcloud-api中新建service层,创建Feign配置文件。
3.编写Feign配置类
@Component//加入到Spring组件中 @FeignClient(value = "SPRINGCLOUD-PROVIDER-DEPT")//微服务名称 public interface DeptClientService { //用this.service.方法调用远程服务器。相当于springcloud-api就是一个总接口。 //通过接口调用远程服务器url,实现相关业务处理。 @GetMapping("/dept/get/{id}") Dept queryById(@PathVariable("id") Long id); @GetMapping("/dept/list") List<Dept> queryAll(); @PostMapping("/dept/add") boolean addDept(Dept dept); }
4.编写consumer的Controller层调用this.service公用业务层。
@RestController public class DeptConsumerController { //如何能调用到业务层?消费者不应该有service层。 //使用Feign @Autowired private DeptClientService service = null; @RequestMapping("/consumer/dept/add") public boolean add(Dept dept){ return this.service.addDept(dept); } @RequestMapping("/consumer/dept/get/{id}") public Dept get(@PathVariable("id") Long id){ return this.service.queryById(id); } @RequestMapping("/consumer/dept/list") public List<Dept> list(){ return this.service.queryAll(); } }
5.主启动类上开启注解。
@SpringBootApplication @EnableEurekaClient//开启ribbon @EnableFeignClients(basePackages = {"com.aruiea"})//扫描包下的FeignClent @ComponenScan("com.aruiea")已经自动被springboot集成了 public class FeignDeptConsumer_80 { public static void main(String[] args) { SpringApplication.run(FeignDeptConsumer_80.class,args); } }
相关文章推荐
- spring cloud微服务快速教程之(三)声明式访问Feign、负载均衡Ribbon
- 玩转Spring Cloud之服务注册发现(eureka)及负载均衡消费(ribbon、feign)
- 学习笔记:微服务11 spring cloud ribbon(负载均衡)+ hystrix(熔断)
- 笔记:Spring Cloud Ribbon 客户端负载均衡
- Spring Cloud 学习笔记(七)--Ribbon负载均衡与自定义Ribbon
- SpringCloud 进阶之Ribbon和Feign(负载均衡)
- springcloud之客户端负载均衡——Netflix Ribbon/Feign
- SpringCloud 笔记 (二)---- 简单搭建一个服务消费者,实现简单的ribbon负载均衡
- feign + ribbon 负载均衡和重试(Spring Cloud)
- Spring Cloud中Hystrix、Ribbon及Feign的熔断关系是什么?
- 最适合新手入门的SpringCloud教程 6—Ribbon负载均衡「F版本」
- Spring Cloud -- Ribbon负载均衡
- 关于在Spring Cloud Feign工程中使用Ribbon配置不生效的问题
- Spring Cloud微服务开发笔记5——Ribbon负载均衡策略规则定制
- 【Spring Cloud】Ribbon负载均衡
- 【Spring Cloud】Ribbon负载均衡
- SpringCloud之Ribbon负载均衡与Feign客户端
- Spring Cloud Netflix 教程(Feign+Ribbon+Hystrix)
- 微服务框架Spring Cloud介绍 Part4: 使用Eureka, Ribbon, Feign实现REST服务客户端
- springcloud入门系列(2)-Feign、Ribbon实现Rest接口请求和负载均衡