zoukankan      html  css  js  c++  java
  • Spring Cloud(四)服务提供者 Eureka + 服务消费者 Feign

    上一篇文章,讲述了如何通过RestTemplate + Ribbon去消费服务,这篇文章主要讲述如何通过Feign去消费服务。

    Feign简介

    Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。

    使用Feign,只需要创建一个接口并注解,它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解,Feign支持可插拔的编码器和解码器,Feign默认集成了Ribbon

    并和Eureka结合,默认实现了负载均衡的效果。

    Feign 具有如下特性:

    • 可插拔的注解支持,包括Feign注解和JAX-RS注解
    • 支持可插拔的HTTP编码器和解码器
    • 支持Hystrix和它的Fallback
    • 支持Ribbon的负载均衡
    • 支持HTTP请求和响应的压缩Feign是一个声明式的Web Service客户端,它的目的就是让Web Service调用更加简单。它整合了RibbonHystrix,从而不再需要显式地使用这两个组件。
    • Feign还提供了HTTP请求的模板,通过编写简单的接口和注解,就可以定义好HTTP请求的参数、格式、地址等信息。接下来,Feign会完全代理HTTP的请求,我们只需要像调用方法一样调用它就可以完成服务请求。

    简而言之:Feign能干RibbonHystrix的事情,但是要用RibbonHystrix自带的注解必须要引入相应的jar包才可以。

    准备工作

    Eureka Service

    导入第三篇文章中的项目:作为服务注册中心

    spring-cloud-eureka-service

    Eureka Provider

    导入第三篇文章中的项目:作为服务的提供者

    spring-cloud-eureka-provider-1
    spring-cloud-eureka-provider-2
    spring-cloud-eureka-provider-3

    Feign Consumer

    服务消费者

    添加依赖

    新建项目 spring-cloud-feign-consumer pom.xml中引入需要的依赖内容:

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-feign</artifactId>
    </dependency>

    开启Feign

    在工程的启动类中,通过@EnableFeignClients 注解开启Feign的功能:

    package com.sc.robbin.consumer;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    import org.springframework.cloud.netflix.feign.EnableFeignClients;
    
    @EnableFeignClients
    @EnableDiscoveryClient
    @SpringBootApplication
    public class FeignConsumerApplication {
        public static void main(String[] args) {
            SpringApplication.run(FeignConsumerApplication.class, args);
        }
    }

    定义接口

    通过@FeignClient("服务名"),来指定调用哪个服务。

    package com.sc.robbin.consumer;
    
    import org.springframework.cloud.netflix.feign.FeignClient;
    import org.springframework.web.bind.annotation.GetMapping;
    /**
     * 描述: 指定这个接口所要调用的 提供者服务名称 "service-hi"
     *
     * @author 
     * @create 2019年7月12日 08:16:40
     **/
    @FeignClient("service-hi")
    public interface  HomeClient {
        @GetMapping("/")
        String consumer();
    }

    消费方法

    写一个 Controller,消费提供者的 home 方法

    package com.sc.robbin.consumer;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.client.RestTemplate;
    
    /**
     * 描述:调用提供者的 `home` 方法
     *
     * @author
     * @create 2017-12-05 18:53
     **/
    @RestController
    public class ConsumerController {
        @Autowired
        private HomeClient homeClient;
    
        @GetMapping(value = "/hello")
        public String hello() {
            return homeClient.consumer();
        }
    }

    添加配置

    完整配置 application.yml

    指定注册中心地址,配置自己的服务名称

    eureka:
      client:
        serviceUrl:
          defaultZone: http://localhost:8761/eureka/
    spring:
      application:
        name: feign-consumer
    server:
      port: 9001

    测试服务

    依次启动项目:

    spring-cloud-eureka-service
    spring-cloud-eureka-provider-1
    spring-cloud-eureka-provider-2
    spring-cloud-eureka-provider-3
    spring-cloud-feign-consumer

    启动该工程后,访问服务注册中心,查看服务是否都已注册成功:http://localhost:8761/ 

    负载均衡响应

    浏览器get 请求: http://localhost:9001/hello

  • 相关阅读:
    Running APP 使用说明
    Android 控件八 WebView 控件
    Android 控件七 ImageView 控件
    Android 控件六 CheckBox 控件
    Android 控件五 RadioButton 控件
    Android 控件四 EditText 控件
    Android 控件三 TextView 控件实现 Button
    Android 控件二 Button
    Android 基础控件演示实例
    Android 控件一 TextView
  • 原文地址:https://www.cnblogs.com/lukelook/p/11173930.html
Copyright © 2011-2022 走看看