SpringCloud核心教程 | 第四篇:服务注册与发现 Consul篇
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
等项目。
微服务架构
“微服务架构”在这几年非常的火热,以至于关于微服务架构相关的开源产品被反复的提及(比如: netflix
、dubbo
),Spring Cloud
也因Spring
社区的强大知名度和影响力也被广大架构师与开发者备受关注。
那么什么是“微服务架构”呢?简单的说,微服务架构就是将一个完整的应用从数据存储开始垂直拆分成多个不同的服务,每个服务都能独立部署、独立维护、独立扩展,服务与服务间通过诸如RESTful API的方式互相调用。
对于“微服务架构”,大家在互联网可以搜索到很多相关的介绍和研究文章来进行学习和了解。也可以阅读始祖Martin Fowler
的《Microservices》(本文不做更多的介绍和描述。
服务治理
在简单介绍了Spring Cloud
和微服务架构之后,下面回归本文的主旨内容,如何使用Spring Cloud
来实现服务治理。
由于Spring Cloud
为服务治理做了一层抽象接口,所以在Spring Cloud
应用中可以支持多种不同的服务治理框架,比如:Netflix Eureka
、Consul
、Zookeeper
。在Spring Cloud
服务治理抽象层的作用下,我们可以无缝地切换服务治理实现,并且不影响任何其他的服务注册、服务发现、服务调用等逻辑。
所以,下面我们通过Eureka这种种服务治理的实现来体会Spring Cloud
这一层抽象所带来的好处。
下一篇介绍基于Consul
的服务注册与调用。
Spring Cloud Consul
首先,我们来尝试使用Spring Cloud Consul
来实现服务治理。
Consul
是一套开源的分布式服务发现和配置管理系统,由 HashiCorp
公司用Go
语言开发。
它具有很多优点。包括: 基于 raft
协议,比较简洁; 支持健康检查, 同时支持 HTTP
和 DNS
协议 支持跨数据中心的WAN
集群 提供图形界面 跨平台,支持 Linux、Mac、Windows
下面,就来具体看看如何使用Spring Cloud Consul
实现服务治理,这里使用Consul
为服务注册中心工程、consul-provider
服务提供者工程、consul-consumer
服务消费者工程。
准备工作
环境:
windowsjdk 8maven 3.0IDEA
构建工程
首先构建父工程,引入父工程依赖:
<?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> <parent> <groupId>cn.zhangbox</groupId> <artifactId>spring-cloud-study</artifactId> <version>1.0-SNAPSHOT</version> </parent> <groupId>cn.zhangbox</groupId> <artifactId>spring-cloud-consul</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <!--子模块--> <modules> <module>consul-provider</module> <module>consul-consumer</module> </modules> </project>
父工程取名为:spring-cloud-consul
构建子工程,分别创建工程名为:、consul-provider
、consul-consumer
并在pom中加入以下依赖:
<?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> <parent> <groupId>cn.zhangbox</groupId> <artifactId>spring-cloud-consul</artifactId> <version>1.0-SNAPSHOT</version> </parent> <groupId>cn.zhangbox</groupId> <artifactId>consul-provider</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>consul-provider</name> <description>this project for Spring Boot</description> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <!-- 版本控制 --> <commons-lang3.version>3.4</commons-lang3.version> <commons-codec.version>1.10</commons-codec.version> <mybatis-spring-boot.version>1.2.0</mybatis-spring-boot.version> <lombok.version>1.16.14</lombok.version> <fastjson.version>1.2.41</fastjson.version> <druid.version>1.1.2</druid.version> </properties> <repositories> <!-- 阿里私服 --> <repository> <id>aliyunmaven</id> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> </repository> </repositories> <dependencies> <!-- mybatis核心包 start --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis-spring-boot.version}</version> </dependency> <!-- mybatis核心包 end --> <!-- 添加consul支持start --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- 添加consul支持start --> <!-- SpringWEB核心包 start --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- SpringWEB核心包 end --> <!-- Swagger核心包 start --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.6.1</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.6.1</version> </dependency> <!-- Swagger核心包 end --> <!-- mysql驱动核心包 start --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!-- mysql驱动核心包 end --> <!-- sprigTest核心包 start --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- sprigTest核心包 end --> <!-- commons工具核心包 start --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>${commons-lang3.version}</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>${commons-codec.version}</version> </dependency> <!-- commons工具核心包 end --> <!-- fastjson核心包 start --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>${fastjson.version}</version> </dependency> <!-- fastjson核心包 end --> <!-- druid核心包 start --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>${druid.version}</version> </dependency> <!-- druid核心包 end --> <!-- lombok核心包 start --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> </dependency> <!-- lombok核心包 end --> </dependencies> <!-- 添加cloud 依赖start --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Dalston.SR1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <!-- 添加cloud 依赖end --> <build> <finalName>eureka-provider</finalName> <plugins> <!-- 添加maven构建插件start --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!-- 添加maven构建插件end --> </plugins> </build></project>
作者:星缘1314
链接:https://www.jianshu.com/p/0818ae23cea2
共同学习,写下你的评论
评论加载中...
作者其他优质文章