服务注册中心(mpc-discovery-eureka):是MPC平台的基础服务,是基于 Netflix Eureka (Netflix是Java实现的开源软件)。服务治理(Eureka)包括服务注册、服务发现和服务检测监控等。
Eureka 作为服务治理,必然满足下面几点:
- 服务本身不存在单点故障,
- 支持集群,即高可用性
- 服务与服务之间通过服务注册中心找到彼此实例
作为服务端(即服务注册中心),包括
- 管理服务实例
- 提供服务注册或下线
- 提供服务发现
- 提供服务注册表至两类客户端(即服务提供者和消费者)
作为客户端(即服务提供者和消费者),包括
- 连接服务注册中心
- 向服务注册中心注册或者下线服务实例
- 向服务注册中心或服务注册缓存列表查询服务
下面一起看下Eureka的工作原理
上图简要描述了Eureka的基本架构,由3个角色组成:
· Eureka Server:提供服务注册和发现
· Provider Service B :服务提供方,将自身服务注册到Eureka,从而使服务消费方能够找到
· Consumer ServiceA:服务消费方,从Eureka获取注册服务列表,从而能够消费服务。
需要注意的是,上图中的3个角色都是逻辑角色。在实际运行中,这几个角色甚至可以是同一个实例,比如在我们项目中,Eureka Server和Service Provider就是同一个JVM进程。
上图更进一步的展示了3个角色之间的交互。
Service Provider会向Eureka Server做Register(服务注册)、Renew(服务续约)、Cancel(服务下线)等操作;
Eureka Server之间会做注册服务的同步,从而保证状态一致;
Service Consumer会向Eureka Server获取注册服务列表,并消费服务。
工作原理清楚了下面开始代码之旅吧
首先需要说明一下mpc\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.jb.mpc</groupId>
<artifactId>mpc</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<modules>
<module>mpc-discovery-eureka</module>
<module>mpc-grs-config</module>
<module>mpc-grs-dao-equipment</module>
<module>mpc-grs-graph</module>
<module>mpc-grs-shapeproperty</module>
<module>mpc-grs-topo</module>
<module>mpc-grs-zuul</module>
<module>mpc-grs-entity </module>
</modules>
<parent>
<!-- springboot 依赖 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.1.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<!-- springcloud依赖 -->
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Camden.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
下面介绍mpc-discovery-eureka服务下的相关配置和代码
首先我们还是先来看一下他的pom.xml文件:mpc\mpc-discovery-eureka\pom.xml
<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>
<!-- Spring Boot 启动父依赖 -->
<parent>
<groupId>com.jb.mpc</groupId>
<artifactId>mpc</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>mpc-discovery-eureka</artifactId>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- Spring Cloud Netflix Eureka Server 依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
</dependencies>
</project>
从此文件我们可以得知,如果我们想要配置一个服务注册中心,我们只需要依赖com.jb.mpc和spring-cloud-starter-eureka-server
l com.jb.mpc:统一版本控制
l spring-cloud-starter-eureka-server:服务注册中心服务
接下来我们在看一个非常重要的配置文件:mpc\mpc-discovery-eureka\src\main\resources\application.yml
server:
port: 8761 #服务端口
eureka:
instance:
hostname: localhost #设置主机名
client:
register-with-eureka: false # 是否向 Eureka 注册服务。该应用为服务注册中心,不需要自注册,设置为 false
fetch-registry: false # 是否检索服务。该应用为服务注册中心,职责为注册和发现服务,无需检索服务,设置为 false
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
最后我们在看一下这个服务的启动文件:mpc\mpc-discovery-eureka\src\main\java\com\jb\mpc\EurekaApplication.java
package com.jb.mpc;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**
* 运行Eureka服务器
* @author pangps
*/
@SpringBootApplication // Spring Boot 应用标识
@EnableEurekaServer // Eureka Server 标识并会自动化读取相关配置。
public class EurekaApplication {
public static void main(String[] args) {
// 程序启动入口
// 启动嵌入式的 Tomcat 并初始化 Spring 环境及其各 Spring 组件
SpringApplication.run(EurekaApplication.class, args);
}
}
这就是一个服务注册中心所有的配置和相关代码,鼠标右键点击Run As --》Spring Boot App启动服务。
成功标志:
到这里我们整个服务注册中心就完成了,感觉是不是很简单呢!