Spring cloud入门-3:服务注册中心-Eureka单机环境构建


  说明:本次spring cloud入门demo是做一个订单模块微服务。

1、引入Eureka

  在上一篇博文中,已经成功实现了消费订单模块调用订单服务,这只是一个非常简单的服务调用demo,那么当系统的服务非常多,服务之间的调用关系又非常复杂的时候,怎么管理我们的服务呢?怎么查看我的系统现在有多少服务呢?怎么样可以查看我们的服务是否都是好的呢?
  由此,我们引出了spring cloud的第一个服务注册与发现的组件:Eurak。
  那么什么是服务注册呢?
  Eureka采用了CS的设计架构。
  1)Eureka Server作为服务注册功能的服务器,它是服务注册中心;
  2)系统中的其他服务,使用Eureka的客户端连接到Eureka Server,并维持心跳连接;
  这样,我们就可以通过Eureka Server来监控系统中各个微服务是否正常运行
  在这里插入图片描述
  Eureka包含2个组件:Eureka Server和Eureka Client
  1)Eureka Server:提供服务注册功能
  各个微服务节点通过配置Eureka启动后,会在Eureka Server中进行注册。这样Eureka Server中的服务注册表,将会存储所有可用服务节点的信息。我们就可以看到目前系统上共有多少服务和起对应信息。
  2)Eureka Client:通过注册中心进行访问
  Eureka Client是一个Java客户端,用于简化和Eureka Server的交互,客户端具备一个内置的、使用轮询负载算法(round-robin)的负载均衡器。在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内没有接收到某个服务节点的心跳,Eureka Server将会从服务注册表中将这个服务节点移除(默认90秒)。
  
  用上一节的订单demo来说明的话,就是订单服务(cloud-provider-payment-8001)先注册到Eureka Server中,这个服务相当于上图的Service Provider。然后消费订单模块(cloud-consumer-order-80)也注册到Eureka Server,这个服务相当于上图中的Service Consumer。这样我们就可以在Eureka中检测到目前有2个模块正在服务。

2、构建Eureka Server服务注册中心

2.1 建module

  第一步建一个Eureka Server服务注册中心:cloud-eureka-server-7001,端口号为7001。
在这里插入图片描述
在这里插入图片描述

2.2 改pom

依赖包可以参考上一节中的消费订单模块,同时由于该服务是一个Eureka Server注册服务中心,所以会多一个组件:spring-cloud-starter-netflix-eureka-server。
在这里插入图片描述
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>cloud2021</artifactId>
        <groupId>org.example.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-eureka-server-7001</artifactId>
    
    <dependencies>
        <!-- 导入 eureka server-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            <version>2.2.2.RELEASE</version>
        </dependency>
        <!-- 导入公共包-->
        <dependency>
            <groupId>org.example.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!-- spring boot web 依赖模块: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-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
            <version>1.14.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

2.3 写yml

配置与Eureka Server相关的参数,同时配置服务端口号为7001
在这里插入图片描述

server.port=7001

# eureka服务端的实例名称
eureka.instance.hostname=localhost
# false表示不向注册中心注册自己
eureka.client.register-with-eureka=false
# false表示自己就是注册中心,职责是维护服务实例,并不需要去检索服务
eureka.client.fetch-registry=false
# 设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址
eureka.client.defaultZone=http://${eureka.instance.hostname=localhost}:${server.port}/eureka/

2.4 主启动

主启动类EurekaServerMain7001除了要启动SpringBootApplication之外,还一定要开启EurekaServer。
在这里插入图片描述

package com.example.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerMain7001 {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerMain7001.class, args);
    }
}

2.5 业务类

该模块是服务注册中心,无需写业务类。

2.6 测试服务注册中心模块

接下来启动服务注册中心模块
在这里插入图片描述
然后访问:http://localhost:7001/,
由下图可知,我们已成功访问到了Eureka Server服务中心首页,可以看到此时没有任何服务节点注册进来(No instances available)。
在这里插入图片描述

3、订单服务注册Eureka

3.1 建module

上一篇博文中,我们已经创建了订单微服务:cloud-provider-payment-8001,我们直接复用。

3.2 改pom

在订单服务的pom文件的基础上,我们要注册进Eureka,所以我们需要添加Eureka Client的依赖组件:spring-cloud-starter-netflix-eureka-client。
在这里插入图片描述

<?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>cloud2021</artifactId>
        <groupId>org.example.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-provider-payment8001</artifactId>

    <dependencies>
        <!-- 导入 eureka client-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <version>2.2.2.RELEASE</version>
        </dependency>
        <!-- 导入公共包-->
        <dependency>
            <groupId>org.example.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!-- spring boot web 依赖模块: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-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
            <version>1.14.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

3.3 写yml

在订单服务的配置文件的基础上,我们要添加Eureka Client的配置进行注册,将订单服务注册到Eureka Server服务注册中心。
在这里插入图片描述

server.port=8001

spring.application.name=cloud-payment-service
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=org.gjt.mm.mysql.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springcloud?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123

mybatis.mapperLocations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.example.springcloud.entities

# 添加Eureka Client配置
# 表示是否将自己注册进Eureka Server,默认为true
eureka.client.register-with-eureka=true
# 表示是否从Eureka Server抓取已有的注册信息,默认为true。
# 该配置在单节点时无所谓,集群配置时必须设置为true,才能配合ribbon使用负载均衡
eureka.client.fetchRegistry=true
eureka.client.service-url.defaultZone=http://localhost:7001/eureka

3.4 主启动

主启动类上,开启Eureka Client,
在这里插入图片描述

package com.example.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient
public class PaymentMain8001 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain8001.class, args);
    }
}

3.5 测试

启动订单服务,看下是否会注册到刚刚的服务注册中心中:
在这里插入图片描述
如下图,刷新服务注册中心地址后,可以看到订单服务(CLOUD-PAYMENT-SERVICE)已经成功注册到Eureka Server中。
在这里插入图片描述

4、消费订单模块注册Eureka

消费订单模块注册Eureka的步骤与订单服务注册Eureka Server的步骤基本一致,请自行类比。

4.1 建module

复用上一篇博文的消费订单模块:cloud-consumer-order-80

4.2 改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>cloud2021</artifactId>
        <groupId>org.example.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-consumer-order-80</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <!-- 导入 eureka client-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <version>2.2.2.RELEASE</version>
        </dependency>
        <!-- 导入公共包-->
        <dependency>
            <groupId>org.example.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!-- spring boot web 依赖模块: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-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
            <version>1.14.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

4.3 写yml

在这里插入图片描述

server.port=8080

spring.application.name=cloud-order-service

# 添加Eureka Client配置
# 表示是否将自己注册进Eureka Server,默认为true
eureka.client.register-with-eureka=true
# 表示是否从Eureka Server抓取已有的注册信息,默认为true。
# 该配置在单节点时无所谓,集群配置时必须设置为true,才能配合ribbon使用负载均衡
eureka.client.fetchRegistry=true
eureka.client.service-url.defaultZone=http://localhost:7001/eureka

4.4 主启动

在这里插入图片描述

package com.example.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient
public class OrderMain80 {
    public static void main(String[] args) {
        SpringApplication.run(OrderMain80.class, args);
    }
}

4.5 测试

再启动消费订单模块(cloud-consumer-order-80),
在这里插入图片描述
此时可以在Eureka Server注册中心中看到,订单服务(CLOUD-PAYMENT-SERVICE)和消费订单服务(CLOUD-ORDER-SERVICE)都已经注册到注册中心了。
在这里插入图片描述
接着,我们再测试上一节中的查看订单接口,还是查看3号订单,可以看到依然可以通过消费订单服务的8080端口去调用订单服务的查看订单接口。
在这里插入图片描述
接着,我们再将刚刚注册的订单服务(CLOUD-PAYMENT-SERVICE)给关闭,模拟服务宕机的情况
如下图,可以看到,刚关闭几秒后,服务注册中心麻烦显示了订单服务是Down的状态。
在这里插入图片描述
接着,再过了几秒之后,如下图,测试服务中心已移除不可用的服务,只剩下消费订单服务了。
在这里插入图片描述

到此,Eureka单机环境的构建已经完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值