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

}
原文地址:https://www.cnblogs.com/NowShowTimeChenKang/p/11720067.html