zl程序教程

您现在的位置是:首页 >  大数据

当前栏目

Eureka集群环境搭建

eureka集群 环境 搭建
2023-06-13 09:11:57 时间

大家好,又见面了,我是你们的朋友全栈君。

前言: 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集群环境搭建完毕。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/137504.html原文链接:https://javaforall.cn