SpringCloud构建微服务入门架构(一)服务注册与发现

来源:互联网 发布:杀女婴知乎 编辑:程序博客网 时间:2024/06/08 07:28

一、前言

         公司后台需要重新架构,采用的是微服务架构,所以需要学习SpringCloud和SpringBoot的一些相关知识。下面我将总结一些最近所学的内容,以便供大家相互学习。


二、正文

         下面是网上的一些基本概念,同时也参考了 http://blog.didispace.com/springcloud1/  程序员DD的文章。


2.1 Spring Cloud 简介

         Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。

      Spring Cloud包含了多个子项目(针对分布式系统中涉及的多个不同开源产品),比如:Spring Cloud Config、Spring Cloud Netflix、Spring Cloud CloudFoundry、Spring Cloud AWS、Spring Cloud Security、Spring Cloud Commons、Spring Cloud Zookeeper、Spring Cloud CLI等项目。


2.2 微服务架构

        “微服务架构”在这几年非常的火热,以至于关于微服务架构相关的产品社区也变得越来越活跃(比如:netflix、dubbo),Spring Cloud也因Spring社区的强大知名度和影响力也被广大架构师与开发者备受关注。

        那么什么是“微服务架构”呢?简单的说,微服务架构就是将一个完整的应用从数据存储开始垂直拆分成多个不同的服务,每个服务都能独立部署、独立维护、独立扩展,服务与服务间通过诸如RESTful API的方式互相调用。

     对于“微服务架构”,大家在互联网可以搜索到很多相关的介绍和研究文章来进行学习和了解。也可以阅读始祖Martin Fowler的《Microservices》,本文不做更多的介绍和描述。


2.3 服务注册与发现

     在简单介绍了Spring Cloud和微服务架构之后,下面回归本文的主旨内容,如何使用Spring Cloud搭建服务注册与发现模块。

     这里我们会用到Spring Cloud Netflix,该项目是Spring Cloud的子项目之一,主要内容是对Netflix公司一系列开源产品的包装,它为Spring Boot应用提供了自配置的Netflix OSS整合。通过一些简单的注解,开发者就可以快速的在应用中配置一下常用模块并构建庞大的分布式系统。它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix),智能路有(Zuul),客户端负载均衡(Ribbon)等。

     所以,我们这里的核心内容就是服务发现模块:Eureka。下面我们动手来做一些尝试。


2.3.1 创建“服务注册中心”

       1)首先我们创建一个Spring boot的工程。(前提是你已经在Eclipse软件中安装了Spring Boot插件)过程这里就不演示了,相信你能学Spring Cloud,绝对不是新手。我们的工程名“eureka-server” 这里展示一下  Pom.xml 文件中的坐标依赖。

       1.1 pom.xml依赖文件

<?xml version="1.0" encoding="UTF-8"?><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.merlin</groupId><artifactId>eureka-server</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>eureka-server</name><description>Demo project for Spring Boot</description><!-- 基于SpringBoot --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.1.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><!-- 设置字符编码以及java版本 --><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><!-- Web依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- eureka-server的依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka-server</artifactId></dependency><!-- 测试的依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><!-- 依赖管理,用于管理Spring-Cloud的依赖,其中Camden.SR6为版本号 --><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><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

      1.2 注册服务中心的启动类:EurekaApplication.class
@EnableEurekaServer //启动一个服务注册中心提供给其他应用进行会话@SpringBootApplicationpublic class EurekaServerApplication {    //下面两种启动方式都是可以的    public static void main(String[] args) {      //SpringApplication.run(EurekaServerApplication.class, args);      new SpringApplicationBuilder(EurekaServerApplication.class).web(true).run(args);    }}

   2.2  application.yml (这里我把application.properties改成了yml格式的文件)
##设置注册中心端口号为1111server:  port: 1111##默认设置下,服务注册中心也会将自己作为客户端来尝试注册自己,所以需要禁用它的客户注册行为.将其设置为falseeureka:  client:    register-with-eureka: false    fetch-registry: false    service-url:      defaultZone: http://localhost:1111/eureka

   这时候,一个基本的Eureka 服务注册中心基本完成。可以进入输入:www.localhost:1111 测试一下。


测试结果如上图。这里我们的服务注册中心已经完成,这时候写两个服务提供方试试。能不能在服务注册中心显示。

 

2.3.2  创建“服务提供方”

下面我们创建提供服务的客户端,并向服务注册中心注册自己。这里用Spring Boot 创建的工程为 service-a.

    1.1 Pom.xml文件信息

     

<?xml version="1.0" encoding="UTF-8"?><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.merlin</groupId><artifactId>service-a</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>service-a</name><description>Demo project for Spring Boot</description><!-- 基于SpringBoot --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.1.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><!-- 设置字符编码以及java版本 --><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-cloud.version>Dalston.SR2</spring-cloud.version></properties><dependencies><!-- eureka的依赖与服务注册中心类似,但是有区别 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency><!-- 测试的依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><!-- 依赖管理,用于管理Spring-Cloud的依赖,其中Camden.SR6为版本号 --><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><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

     1.2 ServiceAApplication.java,启动类文件信息

  

@EnableEurekaClient  @SpringBootApplication //激活Eureka 中 的DiscoveryClient实现public class ServiceAApplication {public static void main(String[] args) {SpringApplication.run(ServiceAApplication.class, args);}}

   1.3  application.yml配置信息如下

 

##应用(服务)的名称spring:  application:    name: service-a##服务的端口号server:  port: 5555##注册服务中心的URLeureka:  client:    service-url:      defaultZone: http://localhost:1111/eureka 

   这时候启动 service-a 服务,可以在服务注册中心看到如下信息。

   

   可以看到 service-a成功注册到了服务中心。搞定。


阅读全文
0 0