前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringCloud入门(一)- Eureka

SpringCloud入门(一)- Eureka

作者头像
用户8902830
发布2021-08-12 11:02:57
3680
发布2021-08-12 11:02:57
举报
文章被收录于专栏:CodeNoneCodeNone

在前期准备的文章中也说过了Spring Cloud的5大组件,今天就来讲讲服务发现(注册)。无论是Spring Cloud H版还是最新的版本,Eureka都是作为服务发现和注册的常用组件。

项目搭建

构建一个eureka的「父模块」,具体怎么实现可以参考前篇文章。

在空项目里面构建「2个模块」

  • eureka的服务端,eureka的客户端,其中客户端在本例仅包括服务的生产者。

Eureka父模块的pom文件如下,为了方便直接引入了server和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>spring-cloud-learning</artifactId>
        <groupId>com.cutey.none</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>eureka</artifactId>
    <packaging>pom</packaging>
    <modules>
        <module>eureka-server8001</module>
        <module>eureka-client-provide7001</module>
        <module>eureka-client-consume9001</module>
    </modules>

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

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>


    </dependencies>

</project>

可以看到pom文件中指明了父模块,同时也继承了父模块的依赖。全部完成后,我的项目结构如下图所示:

「项目的规约」,不一定是和真正开发一样,但是为了方便记忆:

  • 「服务注册中心的端口为8xxx」
  • 「生产端的端口为7xxx」
  • 「消费端的端口为9xxx」

Eureka Server

在上一步的pom文件中就已经通过maven导入了Eureka Server的依赖。如果没有在父模块中导入,则需加入下面的代码:

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

接下来要做的就是「增加配置文件」「启动类」以及「业务代码」的编写。

「配置文件」

application.yml

server:
  port: 8001
eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

注意我这里的端口是8001,但是eureka默认的端口是8761,这个端口可以自行修改,所以问题不大。

还有一个需要注意的点是,defaultZone 「是一定需要的」,官方文档里面是说service-url 是以键值对的形式存储,所以必须要有key和value。

「启动类」

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

主要是加了一个@EnableEurekaServer 的注解,由于是服务端的原因,在这种demo中就没有添加其它多余的业务类。

Eureka Client生产端

生产端可以说真正调用的地方,提供了业务代码。同样在父模块中已经引入了Eureka Client依赖,如果没有在父类中引用,那么需要添加以下代码:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

「配置文件」

server:
  port: 7001
spring:
  application:
    name: eureka-provide

eureka:
  client:
    fetch-registry: true
    register-with-eureka: true
    service-url:
      defaultZone: http://localhost:8001/eureka/
  instance:
    instance-id: eureka-provide7001

其实会发现配置文件大差不差,客户端的时候因为需要往服务端中注册,所以register-with-eureka 为true,并且后续可能去注册中心获取其它地址,fetch-registry 也为true。然后这个instance-id 是服务注册到Eureka的实例id,在后面创建集群的时候也会说到。

「启动类和业务类」

本例把启动类和业务类放在了一起,因为仅仅是入门的原因,所以基本上能简则简,官网上的demo也是这样的。

@SpringBootApplication
@RestController
@EnableEurekaClient
public class EurekaProvide7001 {

    @Value("${server.port}")
    int port;

    @GetMapping("/eureka/provide")
    public String getInfo() {
        return "hello, eureka provide:" + port;
    }
    public static void main(String[] args) {
        SpringApplication.run(EurekaProvide7001.class, args);
    }
}

首先在主启动类上添加了@EnableEurekaClient 的注解表明自己是Eureka Client ;其次添加@RestController 作为web项目的controller ,然后业务逻辑也比较简单,就不再赘述。

服务端和客户端已经有了,现在就可以开启服务来进行测试,先开启端口为8001的服务端,接着开启端口为7001的客户端。

先来看看客户端能否正常地访问业务http://localhost:7001/eureka/provide,肯定是可以的,就是正常的简单的Spring Boot项目

再来看看Eureka界面,访问http://localhost:8001/ ,可以发现服务已经被注册进Eureka

Eureka集群

要声明一点,集群的作用是什么呢,在现阶段能想到的答案是两方面,一方面是做「负载均衡」;其次是「防止服务挂掉」。所以Eureka集群也可以分为两个方面,一个是服务端的集群,一个是客户端负责提供服务的集群。本小节重点讲的是后面的集群。

「启动两个端口来模拟两台服务器」,值得注意的是,虽然端口不一样,但是服务的名字都是一样的。在idea中只需要「修改配置文件」就能启动不同端口的实例。

注意,还记得上面配置文件中有一项instance-id吗,为了演示,已经修改了上面的配置文件

「在不指定id情况下eureka会自动为我们生成实例id,这时候只需要简单修改端口即可。」

「但是,如果上面的instance-id 已经指定过了(正如原本的配置文件),如果只修改端口会发现7002端口并没有注册进去」

idea输出文件如下

这种情况下,只需要在上面配置的基础上再添加一个参数即可

重新启动7002端口,此时可以发现服务已经注册进Eureka中

结语

本篇文章只讲了Eureka Client的生产端,还有消费端没讲。并不是忘记了,而是留着下一讲Ribbon的时候再讲解。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-05-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CodeNone 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 项目搭建
  • Eureka Server
  • Eureka Client生产端
  • Eureka集群
  • 结语
相关产品与服务
微服务引擎 TSE
微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档