对服务治理的理解
服务治理是微服务的核心基础模块,他的作用是用来实现各个微服务实例的自动化注册与发现。
个人理解:在分布式系统中每个应用服务会分别部署到多台服务器上,也就会产生对于同一个接口的请求会有不同的服务器上(同一应用)的响应。对此,就需要对这些服务进行管理(服务注册、服务发现)。服务注册--每个应用以自身服务名作为一组来区分,组里包括该应用在哪些服务器上、IP、端口、版本号、通讯协议等信息。服务发现--服务间的调用不再是直接的指定IP:PORT/xxx的方式进行访问,而是通过之前的注册信息,服务内部进行查找并以某种轮询策略进行分配(那个服务器上的服务实例)访问;定期从服务端获取可用服务列表缓存到本地,当要访问某个服务时,从本地服务列表中进行查询(因此当Eureka宕掉之后其他服务能正常使用,但是不会有新挂接服务的访问信息)。这只是一种粗略的理解,希望能有帮助理解服务治理的概念。下面直接上构建过程。
Spring Cloud Netflix 之 Euraka
注:Spring Cloud Euraka,使用Netflix Euraka 来实现服务注册与发现,包含了服务端/客户端,并且都是Java语言进行编写的,所以Euraka主要适用于Java实现的分布式系统,或者是与jvm兼容的语言构建系统。但是由于Euraka服务端的服务治理机制提供了完备的RESTful API,所以也支持非Java语言构建的服务应用进行注册。而客户端部分流行开发平台以提供针对Euraka注册中心的客户端实现框架。
服务注册中心 Euraka-Server
- 首先创建一个简单的spring boot工程:
点击Next后
勾选web是创建一个标准的spring boot web 工程,要注意spring boot的版本号;后续会有专门的spring boot的学习文档。
依赖配置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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.19.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.xing</groupId>
<artifactId>eurakaone</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eurakaone</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--监控-->
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>1.5.19.RELEASE</version>
</dependency>
<!--eureka 服务端-->
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka-server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
<version>1.3.5.RELEASE</version>
</dependency>
</dependencies>
<!--springCloud 主体框架-->
<dependencyManagement>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Edgware.SR5</version>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
在启动类中添加注解: @EnableEurekaServer 是该工程作为服务注册中心启动。
配置文件:添加配置
访问注册中心界面
控制台--显示启动成功
服务发现--Euraka Client
创建一个基础spring boot工程同上,不同之处在于:
依赖配置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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.19.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.xing</groupId>
<artifactId>clientdemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Client Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--监控-->
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>1.5.19.RELEASE</version>
</dependency>
<!--eureka 客户端-->
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.3.5.RELEASE</version>
</dependency>
</dependencies>
<!--springCloud 主体框架-->
<dependencyManagement>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Edgware.SR5</version>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
启动类添加注解:@EnableEurekaClient 是该工程可以在注册中心上注册被发现(该工程作为正常的业务工程进行开发)
至此简单的服务注册中心与服务发现工程创建完成!