SpringCloud微服务:服务注册与发现
Eureka 是Netflix公司开源的服务注册与发现组件。
常见服务注册与发现组件
Zookeeper、Eureka
Eureka服务注册与发现原理
- 服务向注册中心进行注册
- 获取注册中心其它服务配置
创建Eureka Server
使用Spring Initializr创建项目
创建工程
检查依赖
创建完项目后,检查生成的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 https://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>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>proj.ms</groupId>
<artifactId>registry</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>registry</name>
<description>registry center</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</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>
添加注解
在RegistryApplication类上添加@EnableEurekaServer注解,以启用Eureka的默认配置
package proj.ms.registry;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer
@SpringBootApplication
public class RegistryApplication {
public static void main(String[] args) {
SpringApplication.run(RegistryApplication.class, args);
}
}
添加配置
修改application.yml文件,添加以下内容:
server: port: 8761
eureka:
instance:
hostname: localhost
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
spring:
application:
name: eureka
启动Eureka Server
点击开发工具右上角的【启动】按钮,启动Eureka Server。访问http://localhost:8761/
Eureka集群
Eureka集群部署架构
微服务在注册时,同时注册至多个Eureka,即使其中某个节点不可用,也不会导致服务注册失败。
Eureka 集群同步原理
Eureka不同节点将自动进行数据同步,以保证集群的高可用。
Eureka 集群配置
修改host文件
在host文件中添加以下内容:
127.0.0.1 peer1127.0.0.1 peer2
127.0.0.1 peer3
application.yml
---spring:
profiles: peer1
application:
name: eureka
server:
port: 8761
eureka:
instance:
hostname: peer1
client:
service-url:
defaultZone: http://peer2:8762/eureka/,http://peer3:8763/eureka/
---
spring:
profiles: peer2
application:
name: eureka
server:
port: 8762
eureka:
instance:
hostname: peer2
client:
service-url:
defaultZone: http://peer1:8761/eureka/,http://peer3:8763/eureka/
---
spring:
profiles: peer3
application:
name: eureka
server:
port: 8763
eureka:
instance:
hostname: peer3
client:
service-url:
defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka/
Eureka 集群启动
在Idea中,同时配置多个应用,通过启动参数激活不同的配置文件。
同理,配置3个应用,对应不同的profile。
Eureka 集群验证
在浏览器中访问http://peer1:8761/
访问http://peer2:8762/,http://peer3:8763/ 会发现三个Eureka节点已完成互相注册。
打包部署
打包
通过maven命令进行打包:
mvn clean package -Dmaven.test.skip=true
完成打包后,将在项目target目录生成registry-1.0.0-SNAPSHOT.jar和registry-1.0.0-SNAPSHOT.jar.original两个文件。其中registry-1.0.0-SNAPSHOT.jar包含该项目的所有依赖的jar包。
运行
通过以下命令启动Eureka:
java -jar -Dspring.profiles.active=peer1 registry-1.0.0-SNAPSHOT.jar proj.ms.registry.RegistryApplication
同理,通过指定不同的配置文件以启动集群中所有节点。
java -jar -Dspring.profiles.active=peer1 registry-1.0.0-SNAPSHOT.jar proj.ms.registry.RegistryApplicationjava -jar -Dspring.profiles.active=peer2 registry-1.0.0-SNAPSHOT.jar proj.ms.registry.RegistryApplication
java -jar -Dspring.profiles.active=peer2 registry-1.0.0-SNAPSHOT.jar proj.ms.registry.RegistryApplication
服务生产者与消费者测试
问题汇总
集群环境启动日志中有ConnectException
com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect
问题原因:由于集群中不同节点启动顺序不同,启动过程中相互注册时,注册的“Eureka服务”还未完成启动。如peer1在启动时,peer2还未完成启动,此时peer1将自身注册至peer2时,将会出现上述异常。
解决方案:此异常日志的出现是群集中的正常现象,待集群中所有节点完成启动后,将会成功完成互相注册,日志中不再出现上述异常。
集群环境下,节点在unavailable-replicas列表中
问题原因:Eureka默认使用主机名进行注册
解决方案:在eureka.instance.hostname指定的主机名,并通过修改host文件或DNS保证通过该主机名可以找到正确的主机。
以上是 SpringCloud微服务:服务注册与发现 的全部内容, 来源链接: utcz.com/z/511863.html