zoukankan      html  css  js  c++  java
  • 服务消费者

    Ribbon

    Ribbon是一个基于HTTP和TCP客户端的负载均衡器。Feign中也使用Ribbon.

    Ribbon可以在通过客户端中配置的ribbonServerList服务端列表去轮询访问以达到均衡负载的作用。

    当Ribbon与Eureka联合使用时,ribbonServerList会被DiscoveryEnabledNIWSServerList重写,扩展成从Eureka注册中心中获取服务端列表。同时它也会用NIWSDiscoveryPing来取代IPing,它将职责委托给Eureka来确定服务端是否已经启动。

    pom.xml依赖

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

    在应用主类中,通过@EnableDiscoveryClient注解来添加发现服务能力。创建RestTemplate实例,并通过@LoadBalanced注解开启均衡负载能力。

    复制代码
    @SpringBootApplication
    @EnableDiscoveryClient  //发现服务的能力
    public class RibbonApplication {
        
        //rest 请求对象,具有负载均衡的能力
        @Bean
        @LoadBalanced
        RestTemplate restTemplate() {
            return new RestTemplate();
        }
        public static void main(String[] args) {
            SpringApplication.run(RibbonApplication.class, args);
        }
    }
    复制代码

    创建ConsumerController来消费COMPUTE-SERVICE的add服务。通过直接RestTemplate来调用服务,计算10 + 20的值。

    复制代码
    @RestController
    public class ConsumerController {
        @Autowired
        RestTemplate restTemplate;
        @RequestMapping(value = "/add", method = RequestMethod.GET)
        public String add() {
         //调用服务 return restTemplate.getForEntity("http://COMPUTE-SERVICE/add?a=10&b=20", String.class).getBody(); } }
    复制代码

    application.properties中配置eureka服务注册中心。

    Ribbon总结:

    • 第一步先选择 Eureka Server, 它优先选择在同一个Zone且负载较少的Server;
    • 第二步再根据用户指定的策略,在从Server取到的服务注册列表中选择一个地址。其中Ribbon提供了三种策略:轮询、断路器和根据响应时间加权。

                 

    Feign

    Feign是一个声明式的Web Service客户端,它使得编写Web Serivce客户端变得更加简单。我们只需要使用Feign来创建一个接口并用注解来配置它既可完成。它具备可插拔的注解支持,包括Feign注解和JAX-RS注解。Feign也支持可插拔的编码器和解码器。Spring Cloud为Feign增加了对Spring MVC注解的支持,还整合了Ribbon和Eureka来提供均衡负载的HTTP客户端实现。

    在应用主类中通过@EnableFeignClients注解开启Feign功能

    复制代码
    @SpringBootApplication
    @EnableDiscoveryClient 
    @EnableFeignClients  //开启feign
    public class FeignApplication {
        public static void main(String[] args) {
            SpringApplication.run(FeignApplication.class, args);
        }
    }
    复制代码

    定义compute-service服务的接口

    复制代码
    @FeignClient("compute-service")
    public interface ComputeClient {
        @RequestMapping(method = RequestMethod.GET, value = "/add")
        Integer add(@RequestParam(value = "a") Integer a, @RequestParam(value = "b") Integer b);
    }
    复制代码
    • 使用@FeignClient("compute-service")注解来绑定该接口对应compute-service服务
    • 通过Spring MVC的注解来配置compute-service服务下的具体实现,注意:定义的url 必须与提供服务的url一致,包括请求方式、参数名

    在web层中调用上面定义的ComputeClient 

    复制代码
    @RestController
    public class ConsumerController {
    
    @Autowired ComputeClient computeClient;//feign 的代理类
    @RequestMapping(value = "/add", method = RequestMethod.GET) public Integer add() {
    //调用远程服务方法 return computeClient.add(10, 20); } }
    复制代码

     application.properties中配置eureka服务注册中心。

    Feign总结:

    • 我们使用Feign提供的注解编写HTTP接口的客户端代码非常简单, 只需要声明一个Java接口加上少量注解即可完成。
    • Feign会帮我们处理好一切. 根据我们的接口声明, Feign会在Spring容器启动之后, 将生成的代理类注入, 所以我们不需要写HTTP调用的实现代码就能完成REST接口的调用.
    • Feign服务客户端 定义的请求url必须与服务提供者url一致。
    • Feign服务客户端中的接口名、返回对象可以任意定义。但对象中的属性类型和属性名必须一致,与两个对象中的属性顺序和数量无关
    • 启动 Eureka注册中心、服务提供者、Feign服务客户端,然后 Eureka注册中心挂掉时,Feign服务客户端消费服务是不受影响的。
  • 相关阅读:
    leetcode Convert Sorted List to Binary Search Tree
    leetcode Convert Sorted Array to Binary Search Tree
    leetcode Binary Tree Level Order Traversal II
    leetcode Construct Binary Tree from Preorder and Inorder Traversal
    leetcode[105] Construct Binary Tree from Inorder and Postorder Traversal
    证明中序遍历O(n)
    leetcode Maximum Depth of Binary Tree
    限制 button 在 3 秒内不可重复点击
    HTML 和 CSS 画三角形和画多边行基本原理及实践
    在线前端 JS 或 HTML 或 CSS 编写 Demo 处 JSbin 与 jsFiddle 比较
  • 原文地址:https://www.cnblogs.com/mjzhang/p/8404095.html
Copyright © 2011-2022 走看看