[02] 入门Spring Cloud_配置Eureka

继续之前的内容往下开发,之前内容传送门
项目源码:https://gitee.com/zhangchouchou/spring-cloud-demo

一、Eureka 注册中心

注册中心在整个 spring cloud 系统中扮演着非常重要的角色,比如远程调用、负载均衡等必须有注册中心参与其中才能实现。

Eureka 采用 CS设计结构 ,管理服务与服务之间依赖关系,以实现服务调用、负载均衡、容错等,实现服务的注册与发现。

CS:Client Server 即客户机与服务器结构。客户机需要安装专门的软件。
BS:Browser server 即浏览器与服务器结构。web浏览器与服务器的交互。

Eureka 两个组件:

- Eureka Server 提供服务注册服务

各个微服务节点通过配置启动后,会在 Eureka Server 中进行注册,这样 Eureka Server 中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观看到。

- Eureka Client 通过注册中心进行访问

是一个 Java 客户端,用于简化 Eureka Server 的交互,客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会在 Eureka Server 发送心跳(默认周期30秒)。如果Eureka Server 在多个心跳周期内没有收到某个节点的心跳,Eureka Server 将会从服务器注册表中把这个服务节点移出(默认90秒)

概括

Eureka 可以类比做房屋中介,服务提供者就是房东,服务消费者就是租客。房东和租客将信息注册到 Eureka,Eureka 负责将房东和租客搭桥,使租客能够找到房东。


不过Eureka现在已经停止更新了,最新版本就是 2.*,电商项目中基本都使用 Nacos 代替。但 Eureka 依旧还需要掌握和了解。

二、搭建单机版 Eureka ,IDEA生成 Eureka Server 端服务注册中心

流程概括
  • 搭建 Eureka 服务端(建造房屋中介,端口号7001)
  • 创建 Eureka 客户端,实现服务提供者(创建房东,端口号8001)
  • 创建 Eureka 客户端,实现服务消费者(创建租客,端口号80)

1. 建 Module ,改 POM

使用 maven 方式创建,这样可以控制 spring boot 版本,因为 spring boot 版本和 spring cloud 版本有对应关系,防止自动创建时 spring boot 版本选择时没有合适的版本,模块命名为 : cloud-eureka-server7001

<?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>SpringCloudDemo</artifactId>
        <groupId>org.zjh.springclouddemo</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-eureka-server7001</artifactId>

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

    <dependencies>

        <!--引入 Eureka-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

        <!--自定义API-->
        <dependency>
            <groupId>org.zjh.springclouddemo</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </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>
        </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. 编写 YML

server:
  port: 7001

eureka:
  instance:
    #主机名称
    hostname: localhost

  client:
#    是否往eureka注册(服务端,所以为false)
    register-with-eureka: false
#    是否获取注册信息(服务端,所以不需要)
    fetch-registry: false
#    server端地址
    service-url:
      defaultZone: http://localhost:7001/eureka

3. 添加启动类

添加包,包名与其余模块的包名保持一致

@SpringBootApplication
//开启 Eureka Server 端服务,声明当前的微服务是注册中心
@EnableEurekaServer
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}

4. 测试是否添加成功

启动 EurekaApplication ,打开浏览器,输入 http://localhost:7001/

在这里插入图片描述
至此,Eureka服务端搭建完成。

三、搭建Eureka客户端,创建服务提供者

1. 新建模块,修改 POM

新建模块 cloud-provider-payment8001 ,端口号 8001。

POM 中新增引用,完整 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>SpringCloudDemo</artifactId>
        <groupId>org.zjh.springclouddemo</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

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

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

    <dependencies>

        <!--引入 Eureka-->
        <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.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>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</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>
            <scope>test</scope>
        </dependency>

        <!--自定义API-->
        <dependency>
            <groupId>org.zjh.springclouddemo</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

    </dependencies>
</project>

2. 编写 YML

server:
  port: 8001


spring:
  application:
    name: cloud-payment-service
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/s_c_d?userUnicode=true&characterEncoding=utf-8&userSSL=false
    username: root
    password: root

mybatis:
  #  mapper-locations: classpath:/mapper/*.xml
  type-aliases-package: org.zjh.provider.entities

eureka:
  client:
    # 是否注册到eureka
    register-with-eureka: true
    # 是否发现相关服务
    fetch-registry: true
    # 指定路径
    service-url:
      defaultZone: http://localhost:7001/eureka

3. 添加启动类

注意包名保持一致,我的是 org.zjh.springcloud

在启动类上添加 @EnableEurekaClient 注解

@SpringBootApplication
// Eureka客户端
@EnableEurekaClient
public class ProviderSpringBootApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderSpringBootApplication.class,args);
    }
}

4. 添加业务处理逻辑

添加 Mapper、Service 等业务处理层,此处省略,只关注 Controller

完整代码可在码云上查看,链接:传送门

@RestController
@Slf4j
public class UserController {

    @Autowired
    private UserService usersvice;

    @GetMapping("/user/get/{id}")
    public CommonResult<User> getByID(@PathVariable("id")Integer id){
        User user = usersvice.getByID(id);
        log.info("******* 查询结果 *******" + user);
        if(user != null){
            return new CommonResult(200,"查询成功",user);
        }else{
            return new CommonResult(444,"没有记录,查询ID:" + id,null);
        }
    }

    @PostMapping("/user/addByUser")
    public CommonResult<User> addByUser(@RequestBody User user){
        boolean boo = usersvice.addByUser(user);
        log.info("******* 添加结果 *******" + boo);
        if(boo){
            return new CommonResult(200,"添加成功",boo);
        }else{
            return new CommonResult(444,"添加失败",boo);
        }
    }
}

5. 测试是否添加成功

启动服务,刷新注册中心

红字大意是说链接不安全,不用管,看到红框中的第二行 CLOUD-PAYMENT-SERVICE 证明添加成功。该服务名为 YML 文件中配置

在这里插入图片描述

四、搭建Eureka客户端,创建服务消费者

cloud-consumer-order80 注册进 Eureka Server 成为服务消费者 Comsumer。

1. 在 YML 中添加配置

创建流程和 POM 引入省略,详细代码可在码云中查看:传送门

server:
  port: 80


spring:
  application:
    name: cloud-consumer-order80

eureka:
  client:
#    是否注册到eureka
    register-with-eureka: true
#    是否发现相关服务
    fetch-registry: true
#    指定路径
    service-url:
      defaultZone: http://localhost:7001/eureka

2. 添加启动类

注意服务消费者需要添加注解 @EnableEurekaClient

@SpringBootApplication
// Eureka客户端
@EnableEurekaClient
public class ConsumerSpringBootApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerSpringBootApplication.class,args);
    }
}

3. 添加配置类

添加配置类 RestTemplate 用于进行模块间调用

@SpringBootConfiguration
public class ApplicationContextConfig {

    @Bean
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

4. 添加 Controller

注意 Controller 中是如何进行模块间调用的

@RestController
@Slf4j
public class OrderController {
    public static final String PAYMENT_URL = "http://localhost:8001";

    @Resource
    private RestTemplate restTemplate;

    @PostMapping("/consumer/user/addByUser")
    public CommonResult<User> addByUser(User user){
        return restTemplate.postForObject(PAYMENT_URL + "/user/addByUser",user,CommonResult.class);
    }

    @GetMapping("/consumer/user/get/{id}")
    public CommonResult<User> getByID(@PathVariable("id")Integer id){
        return restTemplate.getForObject(PAYMENT_URL + "/user/get/" + id,CommonResult.class);
    }
}

5. 启动服务进行测试

启动服务,注意 Eureka 服务端为启动状态,启动时先启动服务端再启动客户端

再次访问 http://localhost:7001/,刷新界面,发现服务已经注册进来

在这里插入图片描述

五、测试

现在,服务消费者和提供者都已经成功在注册中心注册

在这里插入图片描述

在消费者查询一下检验能否拿到数据

在这里插入图片描述

查询成功。至此,Eureka服务中心搭建成功。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值