是什么
SpringCloud封装了netflix公司开发的Eureka模块来实现服务注册与发现(可以对比zookeeper),netflix在设计
Eureka时遵循的是AP原则(CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得
)
Eureka的基本架构
Eureka采用了C-S的设计架构,Eureka Server 作为服务注册功能的服务器,它是服务注册中心;而系统中的其他微服务,使用 Eureka 的客户端连接到 Eureka Server并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。
Eureka包含两个组件:Eureka Server和Eureka Client
Eureka Server提供服务注册,各个节点启动后,会在EurekaServer中进行注册,这样EurekaServer中的服务注册表就会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到;EurekaClient是一个Java客户端,用于简化Eureka Server的交互,客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒)
三大角色
Eureka Server 提供服务注册和发现
Service Provider服务提供方将自身服务注册到Eureka,从而使服务消费方能够找到
Service Consumer服务消费方从Eureka获取注册服务列表,从而能够消费服务
根据上章所讲项目继续进行修改和改造
A.microservicecloud-eureka-7001eureka服务注册中心Module
1.新建microservicecloud-eureka-7001Module
2.修改pom文件,完整内容
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.demo.springcloud</groupId>
<artifactId>microservicespringcloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>microservicecloud-eureka-7001</artifactId>
<dependencies>
<!--eureka-server服务端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<!-- 修改后立即生效,热部署 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
</project>
3.修改yml文件,内容如下:
port: 7001
eureka:
instance:
hostname: localhost
client:
register-with-eureka: false #false表示不向注册中心注册自己。
fetch-registry: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址
4.新建EurekaServer7001_App启动类
@EnableEurekaServer//EurekaServer服务器端启动类,接受其它微服务注册进来
public class EurekaServer7001_App {
public static void main(String[] args) {
SpringApplication.run(EurekaServer7001_App.class, args);
}
}
5.测试
启动项目,并输入http://localhost:7001/,如下界面:
B.microservicecloud-provider-dept-8001将已有的部门微服务注册进eureka服务中心
1.修改microservicecloud-provider-dept-8001
2.修改pom文件,在原来的基础上添加下面依赖
<!-- 将微服务provider注册进eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
3.修改yml文件,在原来的内容基础上添加
eureka:
client: #客户端注册进eureka服务列表内
service-url:
defaultZone: http://localhost:7001/eureka
4.修改DeptProvider8001_App主启动类
在类名上添加@EnableEurekaClient 这个注解,表示该服务启动后会自动注册进eureka服务中
5.测试
先要启动EurekaServer,也即是EurekaServer7001_App,之后启动microservicecloud-provider-dept-8001,之后在浏览器中输入http://localhost:7001/
微服务注册名说明:
@EnableEurekaServer和@EnableEurekaClient分别是eureka服务端/客户端
C.actuator与注册微服务信息完善
1.主机名称:服务名称修改
当前问题是显示主机名,目的是不显示主机名,显示成自己设置的名字
修改microservicecloud-provider-dept-8001里面的yml文件
之后刷新http://localhost:7001/
注意到左下角处显示的内容,由此推出下面需要解决的问题
2.想要左下角显示ip地址信息
修改修改microservicecloud-provider-dept-8001的yml文件
之后刷新http://localhost:7001/
点击左下角的地址,即引出下面问题
3.微服务info内容详细信息显示友好
a 修改microservicecloud-provider-dept-8001pom文件内容,添加下面内容
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
b.总的父工程microservicecloud修改pom.xml添加构建build信息
<build>
<finalName>microservicecloud</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<delimiters>
<delimit>$</delimit>
</delimiters>
</configuration>
</plugin>
</plugins>
</build>
c.修改microservicecloud-provider-dept-8001的yml文件
info:
app.name: demo-microservicecloud
company.name: www.demo.com
build.artifactId: $project.artifactId$
build.version: $project.version$
这样在访问信息就比较友好了
这样eureka服务注册就完成了