Spring Cloud封装了Netflix下的Eureka模块来实现服务注册和发现。Eureka采用了C-S架构,Eureka Server是注册中心的服务端,作为注册中心。而系统中的其它的微服务模块使用Eureka的客户端连接到Eureka Server(@EnableDiscoveryClient 或@EnableEurekaClient),并且通过维持心跳连接。系统的维护人员可以通过Eureka服务端来监控微服务模块是否正常运行。
在分布式系统中有个著名的CAP理论,CAP代表的是一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)。CAP理论指的是在这个理论中最多满足两个特性,一般来讲,基于网络的不稳定性,分布容错是不可避免的,所以我们默认CAP中的P总是成立的。
一致性(Consistency):分布式系统中时刻保持数据一致性;
可用性(Availability):在系统集群的一部分节点宕机后,系统依然能够响应用户的请求;
分区容错性(Partition tolerance):当节点出现一些网络故障时仍能够提供服务;
一致性的强制数据统一要求,必然会导致在更新数据时部分节点处于被锁定状态,此时不可对外提供服务,影响了服务的可用性,反之亦然。因此一致性和可用性不能同时满足。
Eureka保证的是AP,保证的是高可用和分区容错性。至于一致性问题则保证的是最终一致性,并不是时刻都会保证数据一致性;而接下来要讲的另外两种注册中心Consul和Zookeeper则保证的是CP(一致性和分区容错性);
Spring Cloud:Greenwich.RELEASE
Maven环境:3.6.3
Jdk:1.8
Eureka服务端步骤:
1、导入pom.xml文件需要的依赖(等待片刻~);
4.0.0
com.cxk.client
sgccplatform-framwork-eureka
0.0.1-SNAPSHOT
jar
sgccplatform-framwork-eureka
注册中心
org.springframework.boot
spring-boot-starter-parent
2.1.1.RELEASE
UTF-8
UTF-8
1.8
Greenwich.RELEASE
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
org.springframework.cloud
spring-cloud-starter
org.springframework.boot
spring-boot-starter-data-redis
org.springframework.boot
spring-boot-starter-test
test
io.projectreactor
reactor-test
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
2、新建application.properties配置文件,添加信息;
spring.application.name=eureka-server
server.port=6001
eureka.instance.hostname=localhost
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
3、修改主启动类;
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
SpringApplication.run(EurekaServerApplication.class, args);
}
}
操作完上面三个步骤之后,接下来要做的就是run启动类。以一个普通java程序的方式来运行便可以,当我们看到有下图字样的时候便证明启动成功!
启动成功之后,我们可以通过Eureka给我们提供的UI界面来访问,在浏览器输入http://localhost:6001便可以进入界面;
Eureka客户端步骤:
1、导入pom.xml文件需要的依赖(等待片刻~);
4.0.0
com.cxk.client
sgccplatform-framwork-eureka-client
1.0-SNAPSHOT
sgccplatform-framwork-eureka-client
http://maven.apache.org
UTF-8
UTF-8
Greenwich.RELEASE
1.8
org.springframework.boot
spring-boot-starter-parent
2.1.1.RELEASE
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.cloud
spring-cloud-config-client
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
2、新建application.properties配置文件,添加信息;
spring.application.name=eureka-client
server.port=6002
eureka.client.serviceUrl.defaultZone=http://localhost:6001/eureka/
3、创建主启动类;
@SpringBootApplication
@EnableEurekaClient
public class EurekaClientApplication
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
SpringApplication.run(EurekaClientApplication.class, args);
}
}
4、编写一个测试类;
@RestController
public class BaseController {
@Value("${server.port}")
String port;
@RequestMapping("/test")
public String test() {
System.out.println("hello world from port " + port);
return port;
}
}
是的,这就是一个普通的不能再普通的映射类了,它的作用就是接受来自浏览器的/test请求并返回相关信息的测试。
其实客户端的创建和服务端创建步骤大同小异,但是文件内容有些不同,pom文件依赖不同,启动类注解不同,application.properties配置文件的信息不一样,客户端需要配置Eureka的服务端地址,也就是注册地址。
启动成功之后,我们可以通过Eureka给我们提供的UI界面来访问,在浏览器输入http://localhost:6001可以看到这个eureka-client已经注册进去了。
然后我们浏览器输入http://localhost:6002/test,我们会在看到控制台打印相关信息,同时浏览器也返回相应的信息。
至此,可以看到客户端已经成功注册进去,同时客户端也可以正常接收浏览器请求,我们可以开心的去实现我们的业务了!
这么好的文章,作者还会持续更新,不点关注还愣着干啥??