dubbo:zk --------------CP。主从的结构。可能你去请求的时候,什么都没有。
springCloud: eurake --------------AP。没有主从,每一个地方都有一份数据的副本,互相之间数据的同步,会出现小问题,会保存副本一段时间。集群如果挂了,会产生数据不一致的问题。
CAP理论 CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性)
IDEA创建springcloud的eureka项目,在Cloud DIscovery里面的。
eureka设置service-url,设置区域zone
创建项目遇到的问题:https://www.cnblogs.com/syp172654682/p/9015057.html
心跳:服务端隔一段时间请求一下
续约:服务端维持着一个可以过期的列表,某一个服务设置90s过期时间,隔一段时间续约一下。
服务消费者不是直接请求注册中心。服务提供者随时提供一份可用的服务列表。通过负载均衡算法调用服务注册中心得到列表选一个去访问。如果过期了挂了,30秒请求一下服务器。
服务的pom文件。
<?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.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.eureka</groupId> <artifactId>eureka-demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>eureka-demo</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Dalston SR4</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> <version>1.3.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> </repository> </repositories> </project>
yml配置:
server: port: 8888 eureka: instance: hostname: eureka #续约时间 lease-expiration-duration-in-seconds: 90 #定时任务 每隔30秒续约一次 lease-renewal-interval-in-seconds: 30 client: fetch-registry: false register-with-eureka: false service-url: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ registry-fetch-interval-seconds: 30 server: #自我保护不会开启 enable-self-preservation: false
然后在Application的主函数这加上@EnableEurekaServer
访问loclhost:8888/的时候如图。
可以一个服务向另一个服务注册,也可以相互注册。
eureka-demo1向eureka-demo注册,这是eureka-demo1的配置文件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.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.clouddemo</groupId> <artifactId>eureka-demo1</artifactId> <version>0.0.1-SNAPSHOT</version> <name>eureka-demo1</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Dalston SR4</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>1.3.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
这里主函数的注解是@EurekaDiscoveryClient
server.port=8081 spring.application.name=hello-service eureka.client.service-url.defaultZone=http://localhost:8888/eureka/
启动成功,会看到日志里面的注册状态204。
eureka的工作原理。