这里只讨论微服务入门级的整合与操作步骤,具体更深入的原理与高级用法,可以在后续的使用过程中,逐步添加上来。

微服务架构,在实现业务的部分,是由一个又一个的服务组成的。因为我选择使用spring cloud,所以最为直接的,就是使用springBoot作为服务架构,这是原生支持的,所以用起来也是比较顺手的。

从最底层开始,我们要创建一个最为基本的springBoot服务。springBoot项目的创建,可以去官网下载zip,里边包含了所有的springBoot应该有的样板目录。这里我使用IDEA,可以支持从spring官网拉取样板代码。创建过程如下:

当default连接非常吃力时,可以尝试使用非https的连接。这样,填好项目名,选择好版本,一直下一步就可以了。在下边这一步时,我使用当前最新的springBoot版本,因为要使用web功能,所以我直接选择了web上的一些依赖。这里使用webflux作为web功能的开发,即如下图所示:

 这样就顺利的创建了一个springBoot的服务了,是不是很简单!

创建完成之后,不着急进行下一步,直接启动一下试试。因为springBoot的自动配置功能,所以,我们不需要进行任何配置,就可以进行服务的启动。如下图所示:

可以看见,默认使用了Netty作为的服务容器。当此为止,springBoot的项目,已经搭建完毕了。

那怎么让他真正成为微服务中的一环呢,我们先要去到项目的pom文件中。可以看到又已经选择的一个依赖,即

要实现springCloud微服务化,需要添加springCloud依赖,我们一步一步的来进行添加。

首先,我们解决依赖的版本问题。因为组件众多,容易出现版本冲突,所以引入版本管理依赖,是很有必要的,可以让我们少走很多弯路。具体如下: 

<dependencyManagement>
    <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>0.9.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
</dependencyManagement>

 然后,添加依赖,因为有了版本管理,所以,添加的依赖不必再使用版本号。

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

可以看到,我们使用的是spring Cloud alibaba的依赖,这是因为nacos就是alibaba开源的,使用起来会顺手一些。

到此为止,主要的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">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.xupy.spring_cloud</groupId>
    <artifactId>service-1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>service-1</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-webflux</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.projectreactor</groupId>
            <artifactId>reactor-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>0.9.0.RELEASE</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>

 然后,在主启动类中添加注解 @EnableDiscoveryClient,开启微服务功能。如果这时启动,回报如下错误:

这是因为还没有配置服务的注册地址。这就要用到在上一节中安装好的nacos注册服务了。只需要在application.yml中添加如下配置即可:

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 47.104.6.8:8848
  application:
    name: service-1

一定要指定application.name,不然注册不成功。然后,启动springBood服务,出现启动成功即可。此时,打开上一节中安装好的nacos服务页面,可以发现在public分区下,服务列表一栏,有刚才启动的服务。到此为止我们的服务算是注册到了nacos上。当然,这只是一个服务。

下一篇将介绍怎么使用nacos的远程配置功能,还有如何解决开发,测试等多个环境共用一个nacos服务的问题。

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐