第二章《Spring Cloud 之服务治理Spring Cloud Eureka 》

什么是服务治理?要用来干什么

作用

它主要用来实现各个微服务实例的自动化注册与发现。在最初开始构建微服务系统的时候可能服务并不多,我们可以通过做一些静态配置来完成服务的调用。比如,有两个服务A和B,其中服务A需要调用服务B来完成一个业务操作时,为了实现服务B的高可用,不论采用服务端负载均衡还是客户端负载均衡,都需要手工维护服务B的具体实例清单。但是随着业务的发展,系统功能越来越复杂,相应的微服务应用也不断增加,我们的静态配置就会变得越来越难以维护。并且面对不断发展的业务,我们的集群规模、服务的位置、服务的命名等都有可能发生变化**,如果还是通过手工维护的方式,那么极易发生错误或是命名冲突等问题。同时,对于这类静态内容的维护也必将**在最初开始构建微服务系统的时候可能服务并不多,我们可以通过做一些静态配置来完成服务的调用。比如,有两个服务A和B,其中服务A需要调用服务B来完成一个业务操作时,为了实现服务B的高可用,不论采用服务端负载均衡还是客户端负载均衡,**都需要手工维护服务B的具体实例清单**。但是随着业务的发展,系统功能越来越复杂,相应的微服务应用也不断增加,**我们的静态配置就会变得越来越难以维护**。并且面对不断发展的业务,**我们的集群规模、服务的位置、服务的命名等都有可能发生变化**,如果还是通过手工维护的方式,那么极易发生错误或是命名冲突等问题。同时,对于这类静态内容的维护也必将消耗大量的人力
为了解决微服务架构中的服务实例维护问题,产生了大量的服务治理框架和产品。这些框架和产品的实现都围绕着服务注册与服务发现机制来完成对微服务应用实例的自动化管理。

服务注册

在服务治理框架中,通常都会构建一个注册中心,每个服务单元向注册中心登记自己提供的服务,将主机与端口号、版本号、通信协议等一些附加信息告知注册中心,注册中心按服务名分类组织服务清单。

服务发现

由于在服务治理框架下运作,服务间的调用不再通过指定具体的实例地址来实现,而是通过向服务名发起请求调用实现。所以,服务调用方在调用服务提供方接口的时候,并不知道具体的服务实例位置。因此,调用方需要向服务注册中心咨询服务,并获取所有服务的实例清单,以实现对具体服务实例的访问。实际的框架为了性能等因素,不会采用每次都向服务注册中心获取服务的方式,并且不同的应用场景在缓存和服务剔除等机制上也会有一些不同的实现策略。

开发步骤

由于是分布式开发,我们可以通常创建一个父工程,子工程为各个微服务。

父工程的pom.xml文件

部分文件省略。需要源码可以上我的github上下载。


        
            
            
                io.spring.platform
                platform-bom
                Brussels-SR10
                pom
                import
            
            
            
                org.springframework.cloud
                spring-cloud-dependencies
                Edgware.SR3
                pom
                import
            
        
    
    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.3
                
                    1.8
                    1.8
                    UTF-8
                
            
        
    
    
        demo-eureka
        demo-user
    

创建注册中心服务eureka 

pom.xml文件

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

        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

application.yml

#server config
server:
  port: 8761
  session:
    timeout: 1800
# eureka config
eureka:
  instance:
    hostname: localhost
  client:
    # 由于该应用为注册中心,所以设置为false,代表不向注册中心注册自己
    registerWithEureka: false
    # 由于注册中心的职责就是维护服务实例,它并不需要去检索服务,所以也设置为false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

启动类

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

运行界面

打开浏览器,输入http://localhost:8761。如果出现以下界面表示配置成功。

第二章《Spring Cloud 之服务治理Spring Cloud Eureka 》_第1张图片

你可能感兴趣的:(spring,cloud,java,spring,微服务,分布式,框架)