SpringCloud学习笔记二:Spring Cloud Eureka 服务治理

Spring Cloud Eureka的用处

Spring Cloud Eureka是Spring Cloud Netflix的微服务架构中最核心的一部分,主要负责完成微服务架构中的服务治理功能,它用来实现各个微服务实例的自动化注册和发现。

本本通过以下几个demo来分享如何通过Eureka进行服务治理

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

一、搭建服务注册中心

项目结构图

SpringCloud学习笔记二:Spring Cloud Eureka 服务治理_第1张图片

pom文件



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        1.5.1.RELEASE
         
    
    com.it
    springcloud
    0.0.1-SNAPSHOT
    springcloud
    Demo project for Spring Cloud

    
        1.8
    

    
    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                Camden.SR6
                pom
                import
            
        

    

    
        
        
            org.springframework.cloud
            spring-cloud-starter-eureka-server
        

    

 

ps:maven中dependencyManagement的意义

1.在Maven中dependencyManagement的作用其实相当于一个对所依赖jar包进行版本管理的管理器。

2.pom.xml文件中,jar的版本判断的两种途径

  • 如果dependencies里的dependency自己没有声明version元素,那么maven就会倒dependencyManagement里面去找有没有对该artifactId和groupId进行过版本声明,如果有,就继承它,如果没有就会报错,告诉你必须为dependency声明一个version
  • 如果dependencies中的dependency声明了version,那么无论dependencyManagement中有无对该jar的version声明,都以dependency里的version为准。

创建启动类

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

application.properties配置文件

#设置tomcat服务端口号
server.port=8081
#设置服务名称
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

访问http://localhost:8081/,进入到Eureka的管理页面

SpringCloud学习笔记二:Spring Cloud Eureka 服务治理_第2张图片

二、注册服务提供者

重新创建一个工程

项目结构图

SpringCloud学习笔记二:Spring Cloud Eureka 服务治理_第3张图片

pom文件



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        1.5.1.RELEASE
         
    
    it.springcloud
    eureka
    0.0.1-SNAPSHOT
    eureka
    Demo project for Spring Boot

    
        1.8
    

    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                Camden.SR6
                pom
                import
            
        

    

    
        
        
            org.springframework.cloud
            spring-cloud-starter-eureka
        

    

启动类

/***
 *
 * @EnableDiscoveryClient
 * 让服务使用eureka服务器
 * 实现服务注册和发现
 *
 */
@EnableDiscoveryClient
@SpringBootApplication
public class EurekaApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }

}

 

控制类

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@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";
    }
}

启动后,控制台会打印出这样一段话

DiscoveryClient_HELLO-SERVICE/SC-201901282139:hello-service:8100 - registration status: 204

 

之前的注册服务也会打印出

Registered instance HELLO-SERVICE/SC-201901282139:hello-service:8100 with status UP (replication=false)

回到页面http://localhost:8081/,服务已经在注册服务中成功注册

 SpringCloud学习笔记二:Spring Cloud Eureka 服务治理_第4张图片

三、服务发现和消费

重新创建项目

项目结构图

SpringCloud学习笔记二:Spring Cloud Eureka 服务治理_第5张图片

 

pom文件


    4.0.0
    com.sam
    hello-consumer
    0.0.1-SNAPSHOT
    
        org.springframework.boot
        spring-boot-starter-parent
        1.5.1.RELEASE
    

    
        1.8
    

    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                Camden.SR6
                pom
                import
            
        

    

    
        
        
            org.springframework.cloud
            spring-cloud-starter-eureka
        
        
        
            org.springframework.cloud
            spring-cloud-starter-ribbon
        

    

 

启动类

@EnableDiscoveryClient
@SpringBootApplication
public class RibbonApplication {

    //@Bean 应用在方法上,用来将方法返回值设为为bean
    @Bean
    @LoadBalanced  //@LoadBalanced实现负载均衡
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(RibbonApplication.class, args);
    }

}

控制类

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@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 !!!";
    }
}

application.properties配置文件

server.port=9999

spring.application.name=hello-consumer
eureka.client.serviceUrl.defaultZone=http://localhost:8081/eureka

测试方法,启动两个hello-server服务,一个hello-consumer服务,注意同时启动的服务端口不能相同。

SpringCloud学习笔记二:Spring Cloud Eureka 服务治理_第6张图片

重新访问eureka页面,发现已经注册了两个server服务,一个consumer服务

SpringCloud学习笔记二:Spring Cloud Eureka 服务治理_第7张图片

多次访问http://localhost:9999/hello-consumer,会发现hello-service1和hello-service2会轮流被调用(已经实现了负责均衡),可以通过两者的控制台打印内容确认

 

SpringCloud学习笔记二:Spring Cloud Eureka 服务治理_第8张图片

总结

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

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

参考资料

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

《Maven中的dependencyManagement 意义》

 

你可能感兴趣的:(SpringCloud,spring,cloud,Eureka,ribbon,服务治理)