在跟大家说Eureka注册中心的时候,先跟大家说一下CAP的原则。
一、CAP原则
该理论提到了分布式系统中的3个特性:
Consistency 数据一致性
分布式系统中,数据会存在多个副本中,有一些问题会导致写入数据时,一部分副本成功、一部分副本失败,造成数据不一致。
满足一致性就要求对数据的更新操作成功后,多副本的数据必须保持一致。
Availability 可用性
在任何时候客户端对集群进行读写操作时,请求能够正常响应。
Partition Tolerance 分区容错性
即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务
CAP 理论指出:这3个特性不可能同时满足,最多满足2个。
Eureka遵循AP原则
二、什么是Eureka?
Eureka是Netflix开发的服务发现框架,主要是用于服务的注册和发现,其主要可以分为两个部分,一个是Eureka服务端(Eureka Server)和Eureka客户端(Eureka Client),其中客户端又可以分为服务提供者(Service Provider)和服务消费者(Service Consumer)。
二、Eureka注册中心配置------单机版
首先我们来创建一个注册中心,取名eurka-server
1、pom.xml文件
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
2、application.yml文件
#端口号
server:
port: 8081
#项目的名字
spring:
application:
name: eurka-server
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
#消费者从注册中心拉取服务列表的功能
fetchRegistry: false
serviceUrl:
defaultZone: http://centerservice7001.com:7001/eureka/
3、启动类
@SpringBootApplication
@EnableEurekaServer//这个注解一定不能忘,该注解表示使用Eureka服务注册中心
public class CenterserviceApplication {
public static void main(String[] args) {
SpringApplication.run(CenterserviceApplication.class, args);
}
}
启动成功后,我们访问http://localhost:8081/,会出现如下页面
好,现在我们注册中心已经没问题了,那我们现在可以来创建一个客户端,并且把客户端注册到我们前面的注册中心里面去
。
1、pom.xml文件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2、application.yml文件
server:
port: 8085
spring:
application:
name: service-hi
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8081/eureka/
3、启动类
@SpringBootApplication
@EnableEurekaClient
@RestController
public class EurekaclientApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaclientApplication.class, args);
}
@RequestMapping("/hi")
public String home(@RequestParam(value = "name", defaultValue = "forezp") String name) {
LOG.log(Level.INFO, "hi is being called");
return "hi " + name + " ,i am from port:" + port;
}
@RequestMapping("/info")
public String info(){
LOG.log(Level.INFO, "calling trace service-hi ");
return "i'm service-hi";
}
}
启动成功之后我们刷新一下http://localhost:8081/,如图出现红色框框证明我们的客户端已经成功注册到了Eureka注册中心了
接下来我们访问一下客户端的方法http://localhost:8085/hi?name=forezp,应该会显示瑞如下:
三、Eureka注册中心-----集群版
如图,Eureka注册中心的集群,用一句话来总结:各个注册中心之间相互注册,相互守望。
我们修改eurka-server的application.yml文件
server:
port: 8081
spring:
application:
name: eurka-server
eureka:
instance:
hostname: centerservice8001.com
client:
registerWithEureka: false
fetchRegistry: false #消费者从注册中心拉取服务列表的功能
serviceUrl:
defaultZone: http://centerservice7001.com:7001/eureka/
我们再建立一个注册中心步骤按照前面
server:
port: 7001
spring:
application:
name: eurka-server7001
eureka:
instance:
hostname: centerservice7001.com
client:
registerWithEureka: false
fetchRegistry: false #消费者从注册中心拉取服务列表的功能
serviceUrl:
defaultZone: http://centerservice8001.com:8081/eureka/
在修改service-hi的application.yml文件
server:
port: 8085
spring:
application:
name: service-hi
eureka:
client:
serviceUrl:
#defaultZone: http://localhost:8081/eureka/
defaultZone: http://centerservice8001.com:8081/eureka/,http://centerservice7001.com:7081/eureka/
除此之外,还需要在C:\Windows\System32\drivers\etc的host文件增加
127.0.0.1 centerservice8001.com
127.0.0.1 centerservice7001.com
访问http://localhost:8081/和http://localhost:7001/
可以看到两个注册中心都已经相互注册,并且客户端也注册到了两个配置中心里面了
四、Eureka知识点
…