zoukankan      html  css  js  c++  java
  • springcloud--part3 : 服务消费者(feign)

    摘自  方志朋博客(http://blog.csdn.net/forezp/article/details/69808079 )

    spring cloud 中调用服务的方式之二---- 通过  Feign 
    一、Feign简介

    Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。

    简而言之:

      Feign 采用的是基于接口的注解
      Feign 整合了ribbon 
     
           Feign使得 Java HTTP 客户端编写更方便。Feign 灵感来源于Retrofit、JAXRS-2.0和WebSocket。Feign最初是为了降低统一绑定Denominator到HTTP API的复杂度,不区分是否支持Restful。Feign旨在通过最少的资源和代码来实现和HTTP API的连接。通过可定制的解码器和错误处理,可以编写任意的HTTP API。

    工作机制
          Feign通过配置注入一个模板化请求进行工作。只需在发送之前关闭它,参数就可以被直接的运用到模板中。然而这也限制了Feign,只支持文本形式的API,它可以在响应请求方面来简化系统。了解了这一点,这也非常容易进行你的单元测试转换。
     
    二  准备工作
      启动eureka-server,端口8761;
      (设置 eureka.server.enable-self-preservation:  在eureka服务注册中心,将没有接收到心跳的服务自动剔除
      
      启动eureka-client 2次,端口分别是8762,8763;
     
    三  创建feign服务
      3.1   新建spring-boot  module,取名service-feign;
           3.2   导包   spring-boot-starter-web ; spring-cloud-starter-eureka ; spring-cloud-starter-feign;
      3.3   配置application.yaml 配置文件,端口 8765;
    server:
      port: 8765
    
    spring:
      application:
        name: service-feign
    
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka/
    

       3.4  在程序的主入口的类上加上@EnableFeignClients 这个注解,这个注解表示开启了feign负载均衡的功能;

      @SpringBootApplication
      @EnableDiscoveryClient
      @EnableFeignClients   //此注解开启feign功能
      public class SpringCloudServiceFeignApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(SpringCloudServiceFeignApplication.class, args);
    	}
    
      }
    

        3.5  创建一个feign接口并通过注解@FeignClient(" 服务名")指定调用某个服务,再通过@RequestMapping(value="/hi", method=RequestMethod.GET) 表明调用 “ service-hi ” 这个服务的 “ /hi ” 这个接口;

    @Service
    @FeignClient(value = "service-hi") //指的是调用service-hi这个服务
    public interface SchedualServiceHi {
    
        @RequestMapping(value = "/hi",method = RequestMethod.GET) //调用service-hi这个服务的 /hi 这个接口
        String sayHiFromClientOne(@RequestParam("name")String name);
    
    }
    

        3.6  在web的Controller层,对外暴露一个 " /hello " 接口,通过上面定义的feign的客户端SchedualServiceHi 来消费服务

    @RestController
    public class HiController {
    
        @Autowired
        SchedualServiceHi schedualServiceHi;
    
        @RequestMapping(value = "/hello",method = RequestMethod.GET)
        public String sayHi(String name){
            return schedualServiceHi.sayHiFromClientOne(name);
        }
    }
    

        3.7  测试: 多次访问 http://localhost:8765/hello?name=zdj,页面会交替出现

    hello,this port is : 8763
    hello,this port is : 8762
    

        说明: 达到了通过feign来实现负载均衡功能的效果。

     
    问题摘录:
      eg 1. “ 我的8763已经停掉了,为什么在注册中心还能看见呢,刷了好几遍一直都在 ”
     eureka.server.enable-self-preservation=false关闭保护机制,确保注册中心可以将不可用的实例剔除



  • 相关阅读:
    android原子
    android进程优先级
    Android 的cyclicBarrier
    android中运用CountDownLatch
    java网络编程长连接的问题
    https
    http 上传文件
    netty4 断线重连
    Linux下高并发socket最大连接数所受的各种限制
    Android Studio NDK及so文件开发
  • 原文地址:https://www.cnblogs.com/zdj-/p/8253479.html
Copyright © 2011-2022 走看看