散装版学习笔记 - SpringCloud使用Eureka作为服务注册中心示例

一、背景

前一阵子公司在开展一块儿新的业务时,采用了新的微服务框架SpringCloud+Eureka,抛弃了之前使用的dubbo+zookeeper。
由于我参与的支付与结算部分的系统因为时间紧迫,如果整体重构成本太高,所以在公司现有的框架模板(SpringCloud、Eureka)基础上,只进行了各个系统的业务代码迁移。迁移过程中,因为不熟悉踩了很多坑,现在有时间把使用的东西再回顾一下。

二、使用版本

  • SpringCloud - Greenwich.SR3
  • SpringBoot - 2.1.0.RELEASE

这块儿需要注意的是,其实SpringBoot和SpringCloud的版本是有对应关系的,如果使用的是最新的SpringBoot版本(2.2.0.RELEASE),maven库中现在是没有新的SpringCloud版本与其对应的,使用低版本的SpringCloud会导致服务启动失败。

时间:2019年10月23日

具体的SpringBoot和SpringCloud对应版本关系可通过这里查询:https://start.spring.io/actuator/info

三、工程环境搭建

讲道理,其实步骤并不复杂,很简单 - -

1. 创建maven主工程gkd-springcloud-eureka-demo

可使用https://start.spring.io/

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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <packaging>pom</packaging>

    <modules>
        <module>gkd-springcloud-eureka-server</module>
        <module>gkd-springcloud-eureka-client</module>
    </modules>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.gkd</groupId>
    <artifactId>gkd-springcloud-eureka-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>gkd-springcloud-eureka-demo</name>
    <description>one day day, you see see you</description>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR3</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>


2. 在主工程下分别创建Eureka server和client的module

工程结构如图:

在这里插入图片描述

gkd-springcloud-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>gkd-springcloud-eureka-demo</artifactId>
        <groupId>com.gkd</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>gkd-springcloud-eureka-server</artifactId>

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

</project>

添加application.yml配置:

server:
  port: 8080

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://localhost:8080/eureka/
  • eureka.client.register-with-eureka 表示是否将自己注册到Eureka Server,默认为true。因为当前应用就是Eureka Server,所以需要设置成false;
  • eureka.client.fetch-registry 表示是否从Eureka Server获取注册信息,默认为true。因为本例是一个单点的Eureka Server,不需要同步其他Eureka Server节点数据,所以设置为false;
  • eureka.client.service-url.defaultZone 设置的是与Eureka Server的交互地址,查询和注册服务都依赖这个地址,如果有多个可以使用英文逗号分隔。

添加服务启动类:

@SpringBootApplication
@EnableEurekaServer
public class App {

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

此时启动服务,通过浏览器访问http:localhost:8080就可以看到如下页面:

在这里插入图片描述

但是此时并没有任务服务注册上去,所以No application available

gkd-springcloud-eureka-client

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>gkd-springcloud-eureka-demo</artifactId>
        <groupId>com.gkd</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>gkd-springcloud-eureka-client</artifactId>

    <dependencies>
        <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>
    </dependencies>


</project>

添加application.yml配置:

server:
  port: 8081

spring:
  application:
    name: eureka-client

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8080/eureka/
  instance:
    prefer-ip-address: true
  • spring.application.name 用于指定注册服务到Eureka Server上的应用名称;
  • eureka.instance.prefer-ip-address 表示将自己的ip注册到Eureka Server上,如果是false的话会显示hostname而不是ip地址。

服务启动类:

@SpringBootApplication
@EnableDiscoveryClient
// 注解@EnableDiscoveryClient,声明这是一个Eureka Client。
// 注解也可以使用@EnableEurekaClient,不同的是@EnableDiscoveryClient同时还可以作为Zookeeper、Consul中发现注解,作用范围更广一些。
public class App {

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

此时启动client的服务,再次访问http:localhost:8080/就会发现eureka-client服务已经注册到了eureka上:

在这里插入图片描述

3. 源码地址

https://github.com/nidagewcc/gkd-spring-learning

参考了以下大佬

https://blog.csdn.net/forezp/article/details/81040925

https://www.kancloud.cn/fymod/springcloud2/784129

以上。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值