本文编写于 127 天前,最后修改于 127 天前,其中某些信息可能已经过时。

在开始学习使用SpringCloud进行开发之前,我们先来了解一下什么是“服务提供者”和“服务消费者”,然后分别编写一个简单的“服务提供者”和“服务消费者”。

一、概念

我们拿第一篇博文《【Spring Cloud总结】1.微服务架构概述》中的电影销售系统的架构来对服务提供者和消费者进行一个定位:

可以看到,当用户访问电影购票系统时,首先访问的是前置系统“电影微服务”,而电影微服务在进行出票的过程中,需要获取用户之前注册的用户信息,此时就需要调用用户微服务的服务,来获取用户信息。这里电影微服务就是“服务消费者”,而用户微服务就是“服务提供者”,电影微服务需要消费用户查询服务,而用户微服务提供了用户查询服务。
有关“服务消费者”和“服务提供者”的定义:

二、编写一个服务提供者

首先我们来编写一个简单的服务提供者样例工程。这里我们直接通过Spring官网提供的构建工具来创建一个SpringBoot工程。打开https://start.spring.io/


这里填写我们需要的信息,其中系统构建使用Maven,编程语言使用Java,SpringBoot使用最新2.2.0(SNAPSHOT快照)版本,Group和Artifact定义为微服务Demo的相关信息:“com.microserver.cloud”、“microserver-simple-provider-user”。
最后需要一些依赖,web、jpa以及H2:

其中web是我们需要的Spring-web,用于支持Web开发;jpa是Spring-jpa是持久层框架,用于操作数据库;H2是H2数据库,内置数据库,用来做一些数据的展示。
点击“Generate Project”按钮,来构建一个基于Spring boot的一个Project。此时会弹出一个Zip压缩包供我们下载,下载完毕后得到一个文件:


我们将该压缩文件解压,准备导入IDE。

打开Spring Tool Suite,这里JDK和Maven按照之前的约定配置好,点击Import将上面的工程导入进去:




导入后,我们可以看到工程的整个结构:

我们查看一下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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.0.BUILD-SNAPSHOT</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.microserver.cloud</groupId>
    <artifactId>microserver-simple-provider-user</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>microserver-simple-provider-user</name>
    <description>Demo project for Spring Boot</description>
 
    <properties>
        <java.version>1.8</java.version>
    </properties>
 
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
 
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </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>
                <exclusion>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
 
    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </pluginRepository>
    </pluginRepositories>
 
</project>

可以看到,SpringBoot的版本就使我们之前选择的2.2.0-SNAPSHOT版本,然后也引入了web、jpa和H2的相关依赖。最上面的src下,生成了一个默认的MicroserverSimpleProviderUserApplication.java类:

package com.microserver.cloud.microserversimpleprovideruser;
 
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
 
@SpringBootApplication
public class MicroserverSimpleProviderUserApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(MicroserverSimpleProviderUserApplication.class, args);
    }
 
}

该类用于加载默认启动项,并启动SpringBoot工程。

下面开始开发服务提供者。首先我们编写一个SQL文件用于建表,在src/main/resource下创建一个schema.sql,存储建表语句: