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"; } }