使用IDEA构建基于SpringCloud的微服务程序- Eureka

  • 一、需要的环境(硬件、软件)
  • 1.1 硬件版本:IDEA
  • 1.2 软件版本:SpringCloud 全家桶
  • 二、搭建微服务程序
  • 2.1 创建父工程
  • 2.2 子工程创建
  • 2.2.1 服务注册中心(Eureka-Server)创建
  • 2.2.1 服务提供者(eureka- enterprise)和服务调用者(eureka-consumer)的创建


一、需要的环境(硬件、软件)

1.1 硬件版本:IDEA

硬件介绍:在这个教程里面IDEA使用的是IntelliJ IDEA 2019.3 (Ultimate Edition)这个版本,IDEA版本尽量用最新的毕竟越新越好用嘛。IDEA这个工具的功能是很强大的,各种各样的插件应有尽有可以让我们快速搭建我们的程序,并且简单易学的特性可以让新手们快速上手。

idea将一个微服务启动成多个实例 idea构建springcloud微服务_服务提供者


看起来界面很简洁挺好看的

idea将一个微服务启动成多个实例 idea构建springcloud微服务_idea将一个微服务启动成多个实例_02

1.2 软件版本:SpringCloud 全家桶

软件介绍:开发一个程序出了硬件之外还需要软件,本文中使用的各种软件版本如下:

  1. maven版本(也可以使用Gradle):3.6.3
  2. mybatis版本:3.4.6
  3. mysql连接jar包版本:5.1.47
  4. springboot版本:2.3.1
  5. springcloud版本:Hoxton SR6

上面需要注意的是springboot的版本需要可springcloud版本对应上,不然会有不兼容的情况出现,如果需要用Hoxton SR5这个版本的springcloud和springboot进行整合时,可以看springcloud官网的介绍,可以看到Hoxton SR5 对应的版本是2.2.4.RELEASE,而我们的2.3.1就应该用Hoxton SR6这个版本了。

idea将一个微服务启动成多个实例 idea构建springcloud微服务_spring_03

二、搭建微服务程序

什么是微服务程序呢?微服务的微的理解简单的理解就是把传统的单一运行程序拆分成若干个小程序,每个小程序都能自己启动运行并负责自己的特有的功能,甚至有的还有自己的数据库。服务呢就是这些小程序将自己的功能服务提供给外面的调用者调用的意思。
从上面的微服务解释就可以得知,我们需要建造多个工程,下面我们就来看怎么建立这个工程。

2.1 创建父工程

父工程的作用就是统一管理软件版本和插件的工程,没有其他特殊的功能,父工程可以方便做版本控制。下面演示一下怎么创建。

打开IDEA点击新建工程,选择maven,直接Next

idea将一个微服务启动成多个实例 idea构建springcloud微服务_idea将一个微服务启动成多个实例_04


根据自己的情况填写信息,点击finish

idea将一个微服务启动成多个实例 idea构建springcloud微服务_java_05


Maven工程已经建立好了,现在我们要在父工程里面的pom文件定义子工程的标准(软件版本)

idea将一个微服务启动成多个实例 idea构建springcloud微服务_maven_06

打开父工程的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">
    <modelVersion>4.0.0</modelVersion>

    <!-- 定义springboot的版本为2.3.1.RELEASE-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>


    <groupId>org.hjy</groupId>
    <artifactId>springcloudMulti</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--父工程要设置成pom-->
    <packaging>pom</packaging>
    <name>springcloudMulti</name>

    <!--编码设置-->
    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>


    <dependencies>
        <!--lombok插件,用来自动生成getter和setter方法-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
            <scope>provided</scope>
        </dependency>

        <!--引入mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>

        <!--mysql 数据库连接jar包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

        <!--test 模块-->
        <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>

    <!--springcloud的版本为 Hoxton.SR6-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR6</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <!--maven插件,用来打包和运行的插件-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

至此父工程就创建好了。

2.2 子工程创建

Eureka 需要创建服务注册中心和若干服务提供者(调用者)。
什么是服务注册中心和服务提供者(调用者)呢?其实三者的关系可以类比为商场、商家和消费者三者的关系,商场(服务注册中心)提供场地给商家(服务提供商),商家把自己的商品(服务)摆在那里给消费者(服务调用者)购买;商场提供的就是场地和商场地图,让消费者能够更快地找到要买的商品。服务提供者也可以是服务调用者,服务调用者也可以是服务提供者。

2.2.1 服务注册中心(Eureka-Server)创建

右键new ->moudule

idea将一个微服务启动成多个实例 idea构建springcloud微服务_idea将一个微服务启动成多个实例_07

选择spring initializr

idea将一个微服务启动成多个实例 idea构建springcloud微服务_maven_08

填写信息

idea将一个微服务启动成多个实例 idea构建springcloud微服务_服务提供者_09

勾选依赖,这里勾选了springcloud discovery里面的eurekaServer依赖

idea将一个微服务启动成多个实例 idea构建springcloud微服务_maven_10


确认信息直接finish

idea将一个微服务启动成多个实例 idea构建springcloud微服务_java_11

建好eureka-server子工程后的项目目录为

idea将一个微服务启动成多个实例 idea构建springcloud微服务_服务提供者_12


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

    <!--指向父工程-->
    <parent>
        <groupId>org.hjy</groupId>
        <artifactId>springcloudMulti</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <groupId>com.hjy</groupId>
    <artifactId>eureka-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <!-- 指定为war包部署-->
    <packaging>war</packaging>
    <name>eureka-server</name>
    <description>Demo project for Spring Boot</description>

    <dependencies>

        <!--spring web依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

        <!--外置tomcat运行要这样配置-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>

    </dependencies>


</project>

修改好pom文件后,需要开启服务注册中心开关和配置服务信息,步骤为

  1. yml配置文件内容修改
    由于springcloud官网用的是yml(yaml)文件来配置应用信息,所以我我就把application.properties文件改成application.yml,其实作用是相同,自己可以选择。以下是内容
#设置服务端口
server:
  port: 8083

# 应用名称
spring:
  application:
    name: eureka-server


#eureka 信息配置
eureka:
  instance:
    hostname: localhost #eureka服务的地址
  client:
    fetch-registry: false # 是否需要检索服务
    register-with-eureka: false #是否需要向注册中心注册自己
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #服务注册中心地址 ,后面的服务提供者和服务调用者填写这个就可以将服务注册进来或者调用
  1. 开启eureka-server开关

在springboot启动类上增加@EnableEurekaServer注解标记这个一个服务注册中心

idea将一个微服务启动成多个实例 idea构建springcloud微服务_服务提供者_13


至此服务注册中心子工程就建好了,启动eureka-server服务,在浏览器输入localhost:8083,如下图就证明服务注册中心就建好了。

idea将一个微服务启动成多个实例 idea构建springcloud微服务_maven_14

2.2.1 服务提供者(eureka- enterprise)和服务调用者(eureka-consumer)的创建

经过上面的步骤,商场已经建立好了,现在就等商家和消费者的到来,下面我们来创建服务提供者(eureka- enterprise) 和服务调用者(eureka-consumer)两个子工程。