Spring Cloud Feign声明式服务消费 Feign

导读:本篇文章讲解 Spring Cloud Feign声明式服务消费 Feign,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

Fegin是什么?

  Feign 是 Netflix 公司开发的一个声明式的 REST 调用客户端;
  Ribbon 负载均衡、Hystrix 服务熔断是我们 Spring Cloud 中进行微服务开发非常基础的组件,在使用的过程中我们也发现它们一般都是同时出现的,而且配置也都非常相似,每次开发都有很多相同的代码,因此 Spring Cloud 基于 Netflix Feign 整合了 Ribbon 和 Hystrix 两个组件,Spring Cloud Feign
对 Ribbon 负载均衡、Hystrix 服务熔断进行简化,在其基础上进行了进一步的封装,不仅在配置上大大简化了开发工作,同时还提供了一种声明式的 Web 服务客户端定义方式;

使用 Feign 实现消费者

   POM坐标:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <artifactId>05_springcloud_service_feign</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!--spring cloud熔断器起步依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
            <version>1.4.4.RELEASE</version>
        </dependency>
        <!--spring boot的feign依赖坐标-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
            <version>1.4.4.RELEASE</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <!--SpringCloud所有依赖管理的坐标-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/libs-milestone/</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

   spring boot入口类:

@SpringBootApplication
@EnableFeignClients     //开启Spring Cloud Feign支持
public class SpringCloudFeignApplicationTest {
    public static void main(String[] args) {
        SpringApplication.run(SpringCloudFeignApplicationTest.class);
    }
}

   声明服务

/**
 * @author 
 * @Description: 使用Feign的客户端绑定远程服务名称
 * 远程服务名称可大写 可小写
 * @date 2020/12/26 18:41
 */
 //指定熔断回调逻辑,不可获取异常信息
@FeignClient(name = "01springcloudprovider",fallback = MyFallBack.class)
//指定熔断回调逻辑,服务熔断获取异常信息
//@FeignClient(name = "01springcloudprovider",fallbackFactory = MyFallBackFactory.class)//可获取异常信息
public interface SpringCloudFeignService {
    /**
     * 声明一个方法,这个方法就是远程服务提供者提供的那个办法
     * @return
     */
    @RequestMapping("/getProviderSpringCloud")
    public String testFeign();
}

服务熔断:

   服务熔断对应:@FeignClient(name = “01springcloudprovider”,fallback = MyFallBack.class)

@Component
public class MyFallBack implements SpringCloudFeignService {
    @Override
    public String testFeign() {
        return "服务出现异常,自定义myfallback!!!";
    }
}

   服务熔断对应可获取异常信息: @FeignClient(name = “01springcloudprovider”,fallbackFactory = MyFallBackFactory.class)//可获取异常信息

@Component
public class MyFallBackFactory implements FallbackFactory<SpringCloudFeignService> {
    @Override
    public SpringCloudFeignService create(Throwable throwable) {
        return new SpringCloudFeignService() {
            @Override
            public String testFeign() {
                return throwable.getMessage();
            }
        };
    }
}

   application.properties属性配置:

#tomcat内置端口
server.port=8083

#配置服务名称和注册中心地址
spring.application.name=05springcloudfeign
eureka.client.service-url.defaultZone=http://erueka8761:8761/eureka,http://erueka8762:8762/eureka

#开启hystrix功能
feign.hystrix.enabled=true

   controller调用:

@RestController
public class SpringCloudFeignController {
	
	//feign 的声明式调用
    @Autowired
    private SpringCloudFeignService springCloudFeignService;

    @RequestMapping("/testFeignController")
    public String testFeignController(){
        String feign = springCloudFeignService.testFeign();
        return feign;
    }

    @RequestMapping("/hello")
    public String hello(){
        return "hello web!!!";
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/77252.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!