Feign负载均衡

suaxi
2020-12-31 / 0 评论 / 99 阅读 / 正在检测是否收录...

Feign负载均衡

Feign是声明式的web service客户端,Spring Cloud集成了Ribbon和Eureka,可以在使用Feign时提供负载均衡的http客户端。

相较于Ribbon,Feign通过创建接口注解使用,即可完成对服务提供方的接口绑定,简化了使用Spring Cloud Ribbon时,自动封装服务调用客户端的开发量。

具体实例:

1、导入依赖

<dependencies>
    <!--feign-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-feign</artifactId>
        <version>1.4.7.RELEASE</version>
    </dependency>
    <!--Ribbon-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-ribbon</artifactId>
        <version>1.4.7.RELEASE</version>
    </dependency>
    <!--Eureka-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
        <version>1.4.7.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>com.sw</groupId>
        <artifactId>springcloud-api</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

2、Controller

package com.sw.springcloud.controller;

import com.sw.springcloud.pojo.Dept;
import com.sw.springcloud.service.DeptClientService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.util.List;

/**
 * @Author suaxi
 * @Date 2020/12/28 22:16
 */

@RestController
public class DeptConsumerController {

    @Autowired
    private DeptClientService client;

    @RequestMapping(value = "/consumer/dept/add",produces = {"application/json;charset=UTF-8"})
    public boolean add(Dept dept){
        return this.client.addDept(dept);
    }

    @RequestMapping(value = "/consumer/dept/get/{id}",produces = {"application/json;charset=UTF-8"})
    public Dept get(@PathVariable("id")Long id){
        return this.client.findById(id);
    }

    @RequestMapping(value = "/consumer/dept/list",produces = {"application/json;charset=UTF-8"})
    public List<Dept> list(){
        return this.client.findAll();
    }
}

3、注册到Spring容器中

package com.sw.springcloud.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

/**
 * @Author suaxi
 * @Date 2020/12/28 22:15
 */

@Configuration
public class ConfigBean {

    @Bean
    @LoadBalanced //注册Ribbon
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

4、SpringBoot启动类开启Feign注解

package com.sw.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;

/**
 * @Author suaxi
 * @Date 2020/12/28 22:29
 */

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients(basePackages = {"com.sw.springcloud"})
public class FeignDeptConsumer_80 {
    public static void main(String[] args) {
        SpringApplication.run(FeignDeptConsumer_80.class,args);
    }
}
0

评论 (0)

取消