Spring Cloud服务发现配置

作者: 谦小易 | 来源:发表于2017-03-28 19:43 被阅读0次

    本篇主要介绍Spring Cloud Netflix的组件配置,包括Eurek,Fegin等。
    我们都知道Spring Cloud的服务发现一个三个角色(详细请见服务发现),如下图

    EurekaRole.png

    接下来我们按照这三个角色来介绍Netflix的组件配置(本篇介绍的配置基于Spring Boot 1.4.4.RELEASE版本)。

    1、Eureka Server配置

    新加一个Spring Boot工程,在pom文件中加入以下依赖

    <dependencyManagement>
      <dependencies>
        <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-dependencies</artifactId>
           <version>Brixton.SR5</version>
           <type>pom</type>
           <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    
    
    <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-eureka-server</artifactId>
    </dependency>
    

    application文件配置

    //eureka server注册的name,唯一标识

    spring.application.name=eureka-server

    //eureka server服务的端口号

    server.port=1111

    启动类,加入@EnableEurekaServer注解。

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

    运行,访问http://localhost:1111/ ,出现以下页面,则证明启动成功

    EurekaServerC.png

    如果想配置Eurek高可用集群,可以通过相互注册的方式来实现。本地启动,可以配置多个application,例如创建application-peer1和application-peer2。

    application-peer1配置如下

    server.port=1111

    eureka.instance.hostname= peer1

    spring.application.name=eureka-server

    eureka.client.serviceUrl.defaultZone=http://127.0.0.1:1112/eureka/

    application-peer2配置如下

    server.port=1112

    eureka.instance.hostname= peer2

    spring.application.name=eureka-server
    eureka.client.serviceUrl.defaultZone=http://peer2:1111/eureka/
    配本地host
    127.0.0.1 peer1 peer1

    打包mvn install,分别启动peer1和peer2

    java -jar eureka.jar --spring.profiles.active=peer1

    java -jar eureka.jar --spring.profiles.active=peer2

    访问http://peer1:1111/或者http://peer2:1112/ ,即可看到两个实例相互注册。

    EurekaServer.png

    由于在线环境的发布脚步是统一的,可以采用只配置一个application,在多台机器上部署的方式,例如10.120.163.01和10.120.163.02两台机器。

    application配置如下

    server.port=1111

    spring.application.name=eureka-server
    eureka.client.serviceUrl.defaultZone=http://10.120.163.01:1111/eureka/,http://10.120.163.01:1111/eureka/

    然后在01,02两台机器上分别运行这个服务,访问10.120.163.01:1111/ 即可看到Eureka页面。

    2、服务者配置

    服务者需要想Eureka注册自己的信息,首先要保证上面例子中Eurek Server的peer1和peer2正常运行。

    新加一个Spring Boot工程,在pom文件中加入以下依赖

    <dependencyManagement>
        <dependencies>
            <dependency>
               <groupId>org.springframework.cloud</groupId>
               <artifactId>spring-cloud-dependencies</artifactId>
               <version>Brixton.SR5</version>
               <type>pom</type>
               <scope>import</scope>
           </dependency>
       </dependencies>
    </dependencyManagement>
    
    <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
    

    application文件配置

    //eureka provider服务的端口号

    server.port=2222

    //eureka provider注册的name,唯一标识

    spring.application.name=eureka-provider

    //指定注册的Eureka Server地址
    eureka.client.serviceUrl.defaultZone=http://peer:1111/eureka,http://peer:1112/eureka

    对外提供index接口

    @RestController
    public class IndexController
    {
        @RequestMapping("/index")
        public String index()
        {
           return "这里是Eureka Provider";
        }
    }
    

    启动类,加入@EnableDiscoveryClient。

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

    运行,即可在http://peer1:1111/ 看到注册信息。

    Provider.png

    3、消费者配置

    首先要保证Eurek Server的peer1和peer2正常运行,eureka-provider正常运行,并注册到Eurek Server上。本节主要介绍Spring Cloud Feign客户端配置。

    新加一个Spring Boot工程,在pom文件中加入以下依赖

    <dependencyManagement>
       <dependencies>
          <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-dependencies</artifactId>
             <version>Brixton.SR5</version>
             <type>pom</type>
             <scope>import</scope>
         </dependency>
      </dependencies>
    </dependencyManagement>
    
    <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
    
    <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-feign</artifactId>
    </dependency>
    

    application文件配置

    //eureka provider服务的端口号

    server.port=3333

    //eureka consumer注册的name,唯一标识

    spring.application.name=eureka-consumer

    //指定注册的Eureka Server地址
    eureka.client.serviceUrl.defaultZone=http://peer:1111/eureka,http://peer:1112/eureka

    Feign客户端配置,消费上面提到的Provider服务。新建一个interface,配置三个属性。name为服务方的spring.application.name,RequestMapping为服务方提供的接口,fallback为降级策略。下面的配置:调用Porovider的/index接口;fallback为服务调用失败后会调用该类的方法,ConsumerFallback为本地类;

    //Consumer接口
    @FeignClient(name = "elements", fallback = ConsumerFallback.class)
    public interface Consumer
    {
        @RequestMapping(value = "/index")
        String index();
    }
    
    
    //ConsumerFallback类,实现Consumer接口
    @Component
    public class ConsumerFallback implements Consumer
    {
        @Override
        public String index()
        {
            return "eureka feign客户端访问失败";
        }
    }
    
    //测试类,注入这个bean,即可调用
    @RestController
    public class test
    {
       @Autowired
       Consumer consumer;
    
       @RequestMapping(value = "/test", method = RequestMethod.GET)
       public String testeureka()
       {
            return  consumer.index();
       }
    }
    

    启动类,加入@EnableDiscoveryClient和@EnableFeignClients。

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

    启动,访问http://localhost:3333/test.html ,即可看到返回值“这里是Eureka Provider”。停掉Provider服务,再次访问,即可看到返回值"eureka feign客户端访问失败"。

    更多详细的配置,请参考SpringCloud官方文档

    相关文章

      网友评论

        本文标题:Spring Cloud服务发现配置

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