大家好,又见面了,我是你们的朋友全栈君。
前言: Eureka已经停止更新了,在新的项目中,不推荐使用,通过对周阳老师视频的学习,本篇文章主要是简单介绍下Eureka,以及如何搭建集群环境的Eureka,让大家对Eureka有个初步的了解。
1.什么是Eureka
Eureka 是 Netflix 开发的,一个基于 REST 服务的,服务注册与发现的组件,
以实现中间层服务器的负载平衡和故障转移。
它主要包括两个组件:Eureka Server 和 Eureka Client
Eureka Client:一个Java客户端,用于与 Eureka Server 的交互
Eureka Server:提供服务注册和发现的能力(通常就是微服务中的注册中心)。
服务在Eureka上注册,然后每隔30秒发送心跳来更新它们的租约。如果客户端不
能多次续订租约,那么它将在大约90秒内从服务器注册表中剔除。注册信息和更新被
复制到集群中的所有eureka节点。来自任何区域的客户端都可以查找注册表信息(每
30秒发生一次)来定位它们的服务(可能在任何区域)并进行远程调用。
2. Eureka集群项目搭建
该示例主要包括4个maven项目,1个订单项目--asc-consumer-order80,2个支付
项目--asc-provider-payment8001,asc-provider-payment8002,2个eureka集群
项目--asc-eureka-server7001,asc-eureka-server7002 。
2.1 遵循以下原则来新建maven项目
1.新建module
2.修改pom.xml
3.新增application.yml文件
4.新建main启动类
5.编写业务类
2.2 新建订单项目
2.2.1 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">
<parent>
<artifactId>aspire-springcloud</artifactId>
<groupId>com.springcloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>asc-provider-payment8002</artifactId>
<dependencies>
<!--eureka-client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
</project>
2.2.2 application.yml文件为
server:
port: 80
spring:
application:
name: asc-consumer-order
eureka:
client:
#表示是否将自己注册进EurekaServer默认为true。
register-with-eureka: true
#是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群
必须设置为true才能配合ribbon使用负载均衡
fetchRegistry: true
service-url:
#单机版
#defaultZone: http://localhost:7001/eureka
# 集群版
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
instance:
instance-id: order80
#访问路径可以显示IP地址
prefer-ip-address: true
2.2.3 业务类为
@RestController
@Slf4j
public class OrderController {
public static final String PAYMENT_URL = "http://ASC-PROVIDER-PAYMENT";
@Autowired
private RestTemplate restTemplate;
@GetMapping(value = "/consumer/order/getPayMent")
public String getPayMent(){
String result = restTemplate.getForObject(PAYMENT_URL+"/order/getPayMent",String.class);
return result;
}
}
2.3 新建两个端口号不同的支付项目
2.3.1 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">
<parent>
<artifactId>aspire-springcloud</artifactId>
<groupId>com.springcloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>asc-provider-payment8001</artifactId>
<dependencies>
<!--eureka-client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
</project>
2.3.2 application.yml文件为
server:
port: 8001
spring:
application:
name: asc-provider-payment
eureka:
client:
#表示是否将自己注册进EurekaServer默认为true。
register-with-eureka: true
#是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
fetchRegistry: true
service-url:
#单机版
#defaultZone: http://localhost:7001/eureka
# 集群版
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
instance:
instance-id: payment8001
#访问路径可以显示IP地址
prefer-ip-address: true
2.3.3 业务类为
@RestController
@Slf4j
public class PaymentController {
@Value("${server.port}")
private String port;
@GetMapping(value = "/order/getPayMent")
public String getPayMent(){
return port;
}
}
2.4 新建两个端口号不同的eureka服务端项目
2.4.1 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">
<parent>
<artifactId>aspire-springcloud</artifactId>
<groupId>com.springcloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>asc-eureka-server7001</artifactId>
<dependencies>
<!--eureka-server-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!--boot web actuator-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--一般通用配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
</project>
2.4.2 application.yml文件为
server:
port: 7001
eureka:
instance:
hostname: eureka7001.com #eureka服务端的实例名称
client:
register-with-eureka: false #false表示不向注册中心注册自己。
fetch-registry: false #false表示自己端就是注册中心,我的职责就是
维护服务实例,并不需要去检索服务
service-url:
#集群指向其它eureka
defaultZone: http://eureka7002.com:7002/eureka/
2.5 测试
启动所有项目,在浏览器输入http://eureka7001.com:7001/,可以看到下图
在浏览器输入http://eureka7002.com:7002/,可以看到下图
说明3个项目都已经注册到eureka服务端了,通过访问订单项目,看看是否能够通过eureka找到支付项目,在浏览其中输入http://127.0.0.1/consumer/order/getPayMent,
浏览器显示的页面为
访问成功,Eureka集群环境搭建完毕。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/137504.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...