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

  • 相关阅读:
    Flutter form 的表单 input
    FloatingActionButton 实现类似 闲鱼 App 底部导航凸起按钮
    Flutter 中的常见的按钮组件 以及自 定义按钮组件
    Drawer 侧边栏、以及侧边栏内 容布局
    AppBar 自定义顶部导航按钮 图标、颜色 以及 TabBar 定义顶部 Tab 切换 通过TabController 定义TabBar
    清空路由 路由替换 返回到根路由
    应对ubuntu linux图形界面卡住的方法
    [转] 一块赚零花钱
    [转]在树莓派上搭建LAMP服务
    ssh保持连接
  • 原文地址:https://www.cnblogs.com/lukelook/p/11173930.html
Copyright © 2011-2022 走看看