美文网首页
2018-06-17-Spring cloud(3)-负载均衡(

2018-06-17-Spring cloud(3)-负载均衡(

作者: ohcomeyes | 来源:发表于2018-10-24 15:06 被阅读0次

    Spring Cloud Feigin(负载均衡)

    上文提到的服务消费者采用的是RestTemplate+ribbon(实现负载均衡)
    目前,在Spring cloud中服务之间通过restful方式调用有两种方式

    • restTemplate+ribbon
      RestTemplate定义了36个与REST资源交互的方法,其中的大多数都对应于HTTP的方法。这里面只有11个独立的方法,有十个有三种重载形式,第十一个则重载了六次,一共形成了36个方法。
    1. delete() 在特定的URL上对资源执行HTTP DELETE操作
    2. exchange()在URL上执行特定的HTTP方法,返回包含对象的ResponseEntity,这个对象是从响应体中映射得到的
    3. execute() 在URL上执行特定的HTTP方法,返回一个从响应体映射得到的对象
    4. getForEntity() 发送一个HTTPGET请求,返回的ResponseEntity包含了响应体所映射成的对象
    5. getForObject() 发送一个HTTP GET请求,返回的请求体将映射为一个对象
    6. postForEntity()POST数据到一个URL,返回包含一个对象的ResponseEntity,这个对象是从响应体中映射得到的
    7. postForObject() POST 数据到一个URL,返回根据响应体匹配形成的对象
    8. headForHeaders() 发送HTTP HEAD请求,返回包含特定资源URL的HTTP头
    9. optionsForAllow() 发送HTTP OPTIONS请求,返回对特定URL的Allow头信息
    10. postForLocation() POST 数据到一个URL,返回新创建资源的URL
    11. put() PUT 资源到特定的URL
    • feign(默认集成了ribbon,hystrix(熔断-后面会讲到))
      Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。
      使用Feign,只需要创建一个接口并注解,它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解,Feign支持可插拔的编码器和解码器,Feign默认集成了Ribbon,并和Eureka结合默认实现了负载均衡的效果。
      关于JAX-WS与JAX-RS两者是不同风格的SOA架构。
      1.JAX-WS:Java API for XML Web Services,规范是一组XML web services的JAVA API,允许开发者可以选择RPC-oriented或者message-oriented 来实现自己的web services。以动词为中心,指定的是每次执行函数(RPC)。
      2.JAX-RS:Java API for RESTful Web Services,以名词为中心,每次执行的时候指的是资源(REST)。

    Feign特性

    • 可插拔的注解支持(servlet3的新特性),包括Feign注解和JAX-RS注解
    • 支持可插拔的HTTP编码器和解码器
    • 支持Hystrix和它的Fallback(后面解释,其实就是服务挂了,新的服务请求的话会返回fallback(可自定义),避免一直耗费servlet容器线程资源)
    • 支持Ribbon的负载均衡
    • 支持HTTP请求和响应的压缩

    Feign能干RibbonHystrix的事情,但是要用RibbonHystrix自带的注解必须要引入相应的jar包才可以,
    Feign还提供了HTTP请求的模板,通过编写简单的接口和注解,就可以定义好HTTP请求的参数、格式、地址等信息

    添加依赖

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

    开启Feign

    @EnableFeignClients
    @EnableDiscoveryClient
    @SpringBootApplication
    public class FeignConsumerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(FeignConsumerApplication.class, args);
        }
    }
    

    创建接口(feign提供的http请求模板)
    通过@FeignClient("服务名"),来指定调用哪个服务

    @FeignClient("eureka-provider")
    public interface  HomeClient {
    
        @GetMapping("/") //服务提供者”/“访问的方法
        String consumer();
    }
    

    消费方法

    //不解释了吧
    @RestController
    public class ConsumerController {
    
        @Autowired
        private HomeClient homeClient;
    
        @GetMapping(value = "/hello")
        public String hello() {
            return  homeClient.consumer();
        }
    }
    

    消费配置

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

    结语

    github上有关于Spring Cloud完整的部署。
    其它相关文章
    Spring cloud(1)-简介以及选择
    Spring cloud(2)-服务发现(Eureka,Consul)
    Spring cloud(3)-负载均衡(Feign,Ribbon)
    Spring cloud(4)-熔断(Hystrix)
    Spring cloud(5)-路由网关(Zuul)
    Spring cloud(6)-配置管理及刷新(Config,Bus)
    最后,给个 star 吧~
    个人博客~
    简书~

    相关文章

      网友评论

          本文标题:2018-06-17-Spring cloud(3)-负载均衡(

          本文链接:https://www.haomeiwen.com/subject/lzxxtqtx.html