美文网首页
Spring Cloud Netflix—声明性REST客户端:

Spring Cloud Netflix—声明性REST客户端:

作者: 嘻嘻哈哈1155 | 来源:发表于2018-03-07 14:36 被阅读0次

    直接使用Ribbon API  您也可以直接使用LoadBalancerClient。例:

    public class MyClass {

        @Autowired

        private LoadBalancerClient loadBalancer;

        public void doStuff() {

            ServiceInstance instance = loadBalancer.choose("stores");

            URI storesUri = URI.create(String.format("http://%s:%s", instance.getHost(), instance.getPort()));

            // ... do something with the URI

        }

    }

    缓存Ribbon配置

    每个Ribbon命名的客户端都有一个相应的子应用程序上下文,Spring Cloud维护,这个应用程序上下文在第一个请求中被延迟加载到命名的客户端。可以通过指定Ribbon客户端的名称,在启动时,可以更改此延迟加载行为,从而热切加载这些子应用程序上下文。

    application.yml

    ribbon:

      eager-load:

        enabled: true

        clients: client1, client2, client3

    声明性REST客户端:Feign

    Feign是一个声明式的Web服务客户端。这使得Web服务客户端的写入更加方便 要使用Feign创建一个界面并对其进行注释。它具有可插入注释支持,包括Feign注释和JAX-RS注释。Feign还支持可插拔编码器和解码器。Spring Cloud增加了对Spring MVC注释的支持,并使用Spring Web中默认使用的HttpMessageConverters。Spring Cloud集成Ribbon和Eureka以在使用Feign时提供负载均衡的http客户端。

    如何加入Feign

    要在您的项目中包含Feign,请使用组org.springframework.cloud和工件IDspring-cloud-starter-feign的启动器。有关 使用当前的Spring Cloud发布列表设置构建系统的详细信息,请参阅Spring Cloud项目页面

    示例spring boot应用

    @Configuration

    @ComponentScan

    @EnableAutoConfiguration

    @EnableEurekaClient

    @EnableFeignClients

    public class Application {

        public static void main(String[] args) {

            SpringApplication.run(Application.class, args);

        }

    }

    StoreClient.java

    @FeignClient("stores")

    public interface StoreClient {

        @RequestMapping(method = RequestMethod.GET, value = "/stores")

        List getStores();

        @RequestMapping(method = RequestMethod.POST, value = "/stores/{storeId}", consumes = "application/json")

        Store update(@PathVariable("storeId") Long storeId, Store store);

    }

    在@FeignClient注释中,String值(以上“存储”)是一个任意的客户端名称,用于创建Ribbon负载平衡器(有关Ribbon支持的详细信息,请参阅下文))。您还可以使用url属性(绝对值或只是主机名)指定URL。应用程序上下文中的bean的名称是该接口的完全限定名称。要指定您自己的别名值,您可以使用@FeignClient注释的qualifier值。

    以上的Ribbon客户端将会发现“商店”服务的物理地址。如果您的应用程序是Eureka客户端,那么它将解析Eureka服务注册表中的服务。如果您不想使用Eureka,您可以简单地配置外部配置中的服务器列表(例如,参见 上文)。

    源码来源

    相关文章

      网友评论

          本文标题:Spring Cloud Netflix—声明性REST客户端:

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