spring cloud 入门系列二:使用Eureka 进行服务治理

匿名 (未验证) 提交于 2019-12-02 22:56:40

服务治理可以说是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册和发现。

Spring Cloud Eureka是Spring Cloud Netflix 微服务套件的一部分,主要负责完成微服务架构中的服务治理功能。

本文通过简单的小例子来分享下如何通过Eureka进行服务治理:

  • 搭建服务注册中心
  • 注册服务提供者
  • 服务发现和消费

==========我是华丽的分割线========================

一、搭建服务注册中心

  先列出完整目录结构:

  

  搭建过程如下:

  1. 创建maven工程:eureka(具体实现略)
  2. 修改pom文件,引入依赖

     <project xmlns="http://maven.apache.org/POM/4.0.0"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">     <modelVersion>4.0.0</modelVersion>     <groupId>com.sam</groupId>     <artifactId>eureka</artifactId>     <version>0.0.1-SNAPSHOT</version>      <parent>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter-parent</artifactId>         <version>1.5.1.RELEASE</version>     </parent>      <properties>         <javaVersion>1.8</javaVersion>     </properties>     <!-- 使用dependencyManagement进行版本管理 -->     <dependencyManagement>         <dependencies>             <dependency>                 <groupId>org.springframework.cloud</groupId>                 <artifactId>spring-cloud-dependencies</artifactId>                 <version>Camden.SR6</version>                 <type>pom</type>                 <scope>import</scope>             </dependency>         </dependencies>      </dependencyManagement>      <dependencies>         <!-- 引入eureka server依赖 -->         <dependency>             <groupId>org.springframework.cloud</groupId>             <artifactId>spring-cloud-starter-eureka-server</artifactId>         </dependency>      </dependencies>  </project>

  3. 创建启动类

     /**  *   * @EnableEurekaServer  * 用来指定该项目为Eureka的服务注册中心  */ @EnableEurekaServer @SpringBootApplication public class EurekaApp {      public static void main(String[] args) {         SpringApplication.run(EurekaApp.class, args);     } }

  4. 配置application.properties文件

     #设置tomcat服务端口号 server.port=1111 #设置服务名称 spring.application.name=eureka-service  eureka.instance.hostname=localhost #注册中心不需要注册自己 eureka.client.register-with-eureka=false #注册中心不需要去发现服务 eureka.client.fetch-registry=false #设置服务注册中心的URL eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka

  5. 启动服务并访问,我们会看到这样的画面:

二、注册服务提供者

  先列出完整目录结构:

  

  搭建过程如下:

  1. 创建maven工程:hello-service(具体实现略)
  2. 修改pom文件,引入依赖

     <project xmlns="http://maven.apache.org/POM/4.0.0"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">     <modelVersion>4.0.0</modelVersion>     <groupId>com.sam</groupId>     <artifactId>hello-service</artifactId>     <version>0.0.1-SNAPSHOT</version>     <parent>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter-parent</artifactId>         <version>1.5.1.RELEASE</version>     </parent>      <properties>         <javaVersion>1.8</javaVersion>     </properties>      <dependencyManagement>         <dependencies>             <dependency>                 <groupId>org.springframework.cloud</groupId>                 <artifactId>spring-cloud-dependencies</artifactId>                 <version>Camden.SR6</version>                 <type>pom</type>                 <scope>import</scope>             </dependency>         </dependencies>      </dependencyManagement>      <dependencies>         <!-- 引入eureka 客户端依赖 -->         <dependency>             <groupId>org.springframework.cloud</groupId>             <artifactId>spring-cloud-starter-eureka</artifactId>         </dependency>      </dependencies> </project>

  3. 创建启动类

     /***  *   * @EnableDiscoveryClient  * 让服务使用eureka服务器  * 实现服务注册和发现  *  */ @EnableDiscoveryClient @SpringBootApplication public class HelloApp {      public static void main(String[] args) {          SpringApplication.run(HelloApp.class, args);     }  }

  4. 创建controller

     @RestController public class HelloController {      Logger logger = LoggerFactory.getLogger(HelloController.class);      @Autowired     DiscoveryClient discoveryClient;          @RequestMapping("/hello")     public String hello() {         ServiceInstance instance = discoveryClient.getLocalServiceInstance();         //打印服务的服务id         logger.info("*********" + instance.getServiceId());         return "hello,this is hello-service";     } }

  5. 配置application.properties文件
     server.port=9090 #设置服务名 spring.application.name=hello-service #设置服务注册中心的URL,本服务要向该服务注册中心注册自己 eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka
  6. 启动并测试
    1. )启动后再hello-service的控制台会有这种字样(xxx代表你的PC名)
       Registered instance HELLO-SERVICE/xxx:hello-service:9090 with status UP (replication=false)

      eureka的控制台会打印出如下字样(xxx代表你的PC名)

       Registered instance HELLO-SERVICE/xxx:hello-service:9090 with status UP (replication=false)
    2. )再次访问localhost:1111,会发现有服务注册到注册中心了

三、服务发现和消费

  完整目录结构如下:

  

  搭建过程:

  1. 创建maven工程(具体实现略)
  2. 修改pom文件,引入依赖

     <project xmlns="http://maven.apache.org/POM/4.0.0"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">     <modelVersion>4.0.0</modelVersion>     <groupId>com.sam</groupId>     <artifactId>hello-consumer</artifactId>     <version>0.0.1-SNAPSHOT</version>     <parent>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter-parent</artifactId>         <version>1.5.1.RELEASE</version>     </parent>      <properties>         <javaVersion>1.8</javaVersion>     </properties>      <dependencyManagement>         <dependencies>             <dependency>                 <groupId>org.springframework.cloud</groupId>                 <artifactId>spring-cloud-dependencies</artifactId>                 <version>Camden.SR6</version>                 <type>pom</type>                 <scope>import</scope>             </dependency>         </dependencies>      </dependencyManagement>      <dependencies>         <!-- 引入eureka 客户端依赖 -->         <dependency>             <groupId>org.springframework.cloud</groupId>             <artifactId>spring-cloud-starter-eureka</artifactId>         </dependency>         <!-- 引入ribbon 依赖 ,用来实现负载均衡,我们这里只是使用,先不作其他介绍-->         <dependency>             <groupId>org.springframework.cloud</groupId>             <artifactId>spring-cloud-starter-ribbon</artifactId>         </dependency>      </dependencies> </project>  这里比hello-service服务提供者,多了ribbon的依赖

  3. 创建启动类

     @EnableDiscoveryClient @SpringBootApplication public class ConsumerApp {       //@Bean 应用在方法上,用来将方法返回值设为为bean     @Bean     @LoadBalanced  //@LoadBalanced实现负载均衡     public RestTemplate restTemplate() {         return new RestTemplate();     }          public static void main(String[] args) {         SpringApplication.run(ConsumerApp.class, args);     } }  
     这里也要用到@EnableDiscoveryClient, 让服务使用eureka服务器, 实现服务注册和发现
      

  4. 创建controller

     @RestController public class ConsumerController {      //这里注入的restTemplate就是在com.sam.ConsumerApp中通过@Bean配置的实例     @Autowired     RestTemplate restTemplate;      @RequestMapping("/hello-consumer")     public String helloConsumer() {         //调用hello-service服务,注意这里用的是服务名,而不是具体的ip+port         restTemplate.getForObject("http://hello-service/hello", String.class);         return "hello consumer finish !!!";     } }

  5. 配置application.properties文件

     server.port=9999  spring.application.name=hello-consumer eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka   #这里的配置项目和服务提供者hello-service一样

  6. 启动,测试
    1. )启动eureka。为了展示负责均衡的效果,我们的hello-service启动两个服务,启动两个服务的具体步骤如下
      1. 以上是hello-service1的启动步骤,端口号为9090;同样方法设置hello-service2,端口号为9091(具体实现略)。

    2. )启动hello-consumer
    3. )再次访问http://localhost:1111/,会发现有2个hello-service服务(端口号一个是9090,一个是9091),1个hello-consume服务

四、总结

以上实例实现了基本的服务治理:

  • 通过spring-cloud-starter-eureka-server和@EnableEurekaServer实现服务注册中心
  • 通过spring-cloud-starter-eureka和@EnableDiscoveryClient使用并注册到服务注册中心
  • 通过spring-cloud-starter-eureka和@EnableDiscoveryClient使用注册中心并发现服务,通过spring-cloud-starter-ribbon来实现负载均衡消费服务

PS:这里说明下,我用的IDE是Spring Tool Suite,是spring定制版的eclipse,方便我们使用spring进行开发,有兴趣的朋友可以自行百度了解下。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!