Springboot integrates springcloud to implement a simple demo complete example of distributed services

Springboot integrates springcloud to implement distributed services

One: Create a maven project as the parent project to manage dependent versions

<groupId>com.springcloud</groupId>

    <artifactId>parent</artifactId>

    <version>1.0-SNAPSHOT</version>

    <packaging>pom</packaging>

The pom file of the parent project is as follows

<?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>

 

    <groupId>com.springcloud</groupId>

    <artifactId>parent</artifactId>

    <version>1.0-SNAPSHOT</version>

    <packaging>pom</packaging>

 

    <modules>

        <module>../register-center</module>

        <module>../provider</module>

        <module>../consumer</module>

    </modules>

 

 

    <parent>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-parent</artifactId>

        <version>2.0.7.RELEASE</version>

        <relativePath/> <!-- lookup parent from repository -->

    </parent>

 

    <properties>

        <java.version>1.8</java.version>

        <guli.version>0.0.1-SNAPSHOT</guli.version>

        <mybatis-plus.version>3.0.5</mybatis-plus.version>

        <velocity.version>2.0</velocity.version>

        <swagger.version>2.7.0</swagger.version>

        <!--<poi.version>3.9</poi.version>-->

    </properties>

 

    <dependencies>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

        </dependency>

 

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-test</artifactId>

            <scope>test</scope>

        </dependency>

    </dependencies>

    <dependencyManagement>

        <dependencies>

 

            <!--&lt;!&ndash;xls&ndash;&gt;-->

            <!--<dependency>-->

                <!--<groupId>org.apache.poi</groupId>-->

                <!--<artifactId>poi</artifactId>-->

                <!--<version>${poi.version}</version>-->

            <!--</dependency>-->

            <!--&lt;!&ndash;xlsx&ndash;&gt;-->

            <!--<dependency>-->

                <!--<groupId>org.apache.poi</groupId>-->

                <!--<artifactId>poi-ooxml</artifactId>-->

                <!--<version>${poi.version}</version>-->

            <!--</dependency>-->

 

            <!--swagger-->

            <dependency>

                <groupId>io.springfox</groupId>

                <artifactId>springfox-swagger2</artifactId>

                <version>${swagger.version}</version>

            </dependency>

            <dependency>

                <groupId>io.springfox</groupId>

                <artifactId>springfox-swagger-ui</artifactId>

                <version>${swagger.version}</version>

            </dependency>

 

 

            <!--mybatis-plus 持久层-->

            <dependency>

                <groupId>com.baomidou</groupId>

                <artifactId>mybatis-plus-boot-starter</artifactId>

                <version>${mybatis-plus.version}</version>

            </dependency>

 

            <!-- velocity 模板引擎, Mybatis Plus 代码生成器需要 -->

            <dependency>

                <groupId>org.apache.velocity</groupId>

                <artifactId>velocity-engine-core</artifactId>

                <version>${velocity.version}</version>

            </dependency>

 

 

 

            <!--Spring Cloud-->

            <dependency>

                <groupId>org.springframework.cloud</groupId>

                <artifactId>spring-cloud-dependencies</artifactId>

                <version>Finchley.SR2</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>

 

        <resources>

            <resource>

                <directory>src/main/java</directory>

                <includes>

                    <include>**/*.xml</include>

                </includes>

                <filtering>false</filtering>

            </resource>

        </resources>

    </build>

 

 

</project>

引入相关得到依赖并引入相关依赖的版本控制,让子类能有springboot-web的功能,并且引入了dpringvcoud的版本

接着创建注册中心

注册中心需要edueka组件,可以选择创建项目的时候添加,我这里选择手动添加

 

注册中心需要继承parent父工程

#服务端口

server.port=8002

 

#是否将自己注册到Eureka服务器中,本身是服务器,无需注册

eureka.client.register-with-eureka=false

#是否从Eureka中获取注册信息

eureka.client.fetch-registry=false

#Eureka客户端与Eureka服务端进行通信的地址

eureka.client.service-url.defaultZone=http://127.0.0.1:${server.port}/eureka/

启动注册中心,并访问

127.0.0.1:8002

注册中心搭建完成,接下来我们搭建消费端和提供端

首先搭建提供端

提供端的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>com.springcloud</groupId>

        <artifactId>parent</artifactId>

        <version>1.0-SNAPSHOT</version>

    </parent>

 

    <groupId>com.springcloud</groupId>

    <artifactId>provider</artifactId>

    <version>0.0.1-SNAPSHOT</version>

    <name>provider</name>

    <description>Demo project for Spring Boot</description>

 

    <properties>

        <java.version>1.8</java.version>

    </properties>

 

    <dependencies>

        <!--服务注册-->

        <dependency>

            <groupId>org.springframework.cloud</groupId>

            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>

        </dependency>

 

        <!--mybatis-plus-->

        <dependency>

            <groupId>com.baomidou</groupId>

            <artifactId>mybatis-plus-boot-starter</artifactId>

            <version>3.0.5</version>

        </dependency>

 

        <!--mysql-->

        <dependency>

            <groupId>mysql</groupId>

            <artifactId>mysql-connector-java</artifactId>

 

        </dependency>

 

        <!-- velocity 模板引擎, Mybatis Plus 代码生成器需要 -->

        <dependency>

            <groupId>org.apache.velocity</groupId>

            <artifactId>velocity-engine-core</artifactId>

        </dependency>

 

        <!--swagger-->

        <dependency>

            <groupId>io.springfox</groupId>

            <artifactId>springfox-swagger2</artifactId>

        </dependency>

        <dependency>

            <groupId>io.springfox</groupId>

            <artifactId>springfox-swagger-ui</artifactId>

        </dependency>

 

        <!--lombok用来简化实体类:需要安装lombok插件-->

        <dependency>

            <groupId>org.projectlombok</groupId>

            <artifactId>lombok</artifactId>

        </dependency>

    </dependencies>

 

    <build>

        <plugins>

            <plugin>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-maven-plugin</artifactId>

            </plugin>

        </plugins>

    </build>

 

</project>

配置application.properties,在客户端微服务中添加注册Eureka服务的配置信息

# 服务端口

server.port=8001

# 服务名

spring.application.name=springcloud-provider

 

# 环境设置:dev、test、prod

spring.profiles.active=dev

 

# mysql数据库连接

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.datasource.url=jdbc:mysql://122.51.97.164:3306/jk?setUnicode=true&characterEncoding=utf8&useSSL=false

spring.datasource.username=root

spring.datasource.password=xxxx

 

 

 

#指定注册中心地址

eureka.client.service-url.defaultZone=http://127.0.0.1:8002/eureka/

#eureka服务器上获取的是服务器的ip地址,否则是主机名

eureka.instance.prefer-ip-address=true

我们这里只是为了实现分布式的效果所以在项目中没有具体的业务逻辑,知识在提供段返回一个string就可以,不过为了springboot的自动扫描功能,会扫描项目的db连接,我们在这里加上了数据库配置,其实也可以在启动类中排序db的扫描也可以。

在客户端微服务启动类中添加注解

@EnableEurekaClient

我们在这里的controller中只返回一个string,具体业务的话可以自己实现。我们这里只展示分布式的效果。

Autowired

    private BookService bookService;

    @GetMapping("/book")

    public String getAllBookInfo(){

        return "123";

    }

Controller中的简单代码

启动服务,在监控中心查看服务

然后创建消费端consumer

<?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>com.springcloud</groupId>

    <artifactId>parent</artifactId>

    <version>1.0-SNAPSHOT</version>

</parent>

<groupId>com.springcloud</groupId>

<artifactId>consumer</artifactId>

<version>0.0.1-SNAPSHOT</version>

<name>consumer</name>

<description>Demo project for Spring Boot</description>

 

<properties>

    <java.version>1.8</java.version>

</properties>

 

<dependencies>

 

    <!--服务注册-->

    <dependency>

        <groupId>org.springframework.cloud</groupId>

        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>

    </dependency>

 

    <!--mybatis-plus-->

    <!--<dependency>-->

    <!--<groupId>com.baomidou</groupId>-->

    <!--<artifactId>mybatis-plus-boot-starter</artifactId>-->

    <!--<version>3.0.5</version>-->

    <!--</dependency>-->

 

    <!--mysql-->

    <dependency>

        <groupId>mysql</groupId>

        <artifactId>mysql-connector-java</artifactId>

 

    </dependency>

 

    <!-- velocity 模板引擎, Mybatis Plus 代码生成器需要 -->

    <!--<dependency>-->

    <!--<groupId>org.apache.velocity</groupId>-->

    <!--<artifactId>velocity-engine-core</artifactId>-->

    <!--</dependency>-->

 

    <!--swagger-->

    <!--<dependency>-->

    <!--<groupId>io.springfox</groupId>-->

    <!--<artifactId>springfox-swagger2</artifactId>-->

    <!--</dependency>-->

    <!--<dependency>-->

    <!--<groupId>io.springfox</groupId>-->

    <!--<artifactId>springfox-swagger-ui</artifactId>-->

    <!--</dependency>-->

 

    <!--lombok用来简化实体类:需要安装lombok插件-->

    <!--<dependency>-->

    <!--<groupId>org.projectlombok</groupId>-->

    <!--<artifactId>lombok</artifactId>-->

    <!--</dependency>-->

 

    <!--服务调用-->

    <dependency>

        <groupId>org.springframework.cloud</groupId>

        <artifactId>spring-cloud-starter-openfeign</artifactId>

    </dependency>

</dependencies>

 

<build>

    <plugins>

        <plugin>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-maven-plugin</artifactId>

        </plugin>

    </plugins>

</build>

 

</project>

 

在consumer启动类上加上注解

@EnableFeignClients

消费端的配置文件,其实没什么用

 

# 服务端口

server.port=8004

# 服务名

spring.application.name=springcloud-consumer

 

# 环境设置:dev、test、prod

spring.profiles.active=dev

 

# mysql数据库连接

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.datasource.url=jdbc:mysql://122.51.97.164:3306/jk?setUnicode=true&characterEncoding=utf8&useSSL=false

spring.datasource.username=root

spring.datasource.password=xxxx

 

#mybatis日志

mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

 

#返回json的全局时间格式

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss

spring.jackson.time-zone=GMT+8

 

#配置mapper xml文件的路径

mybatis-plus.mapper-locations=classpath:com/online/edu/eduservice/mapper/xml/*.xml

 

#指定注册中心地址

eureka.client.service-url.defaultZone=http://127.0.0.1:8002/eureka/

#eureka服务器上获取的是服务器的ip地址,否则是主机名

eureka.instance.prefer-ip-address=true

 

创建包和接口

创建client

@FeignClient注解用于指定从哪个服务中调用功能 ,名称与被调用的服务名保持一致。

@GetMapping注解用于对被调用的微服务进行地址映射。

@PathVariable注解一定要指定参数名称,否则出错

@RequestParam注解一定要指定参数名称,否则出错

@Component注解防止,在其他位置注入CodClientidea报错

package com.guli.edu.client;

 

@FeignClient("guli-vod")

@Component

public interface VodClient {

       @DeleteMapping(value = "/admin/vod/video/{videoId}")

       public R removeVideo(@PathVariable("videoId") String videoId);

}

 

@Component

@FeignClient("xueyuan-vidservice")

public interface VidClient {

    //定义调用的方法

    //方法调用路径

    @DeleteMapping("/vidservice/vod/{videoId}")

    public R removeVideoAliyunId(@PathVariable("videoId") String videoId);

 

    //定义调用删除多个视频的方法

    @DeleteMapping("/vidservice/vod/removeMoreVideo")

    public R removeMoreVideoAlihyun(@RequestParam("videoList") List videoList);

}

调用微服务

我们这里只是为了演示效果,所以直接在controller里面演示效果了

@Autowired

    private BookClient bookClient;

 

    @GetMapping("/get")

    public String getinfo(){

        String allBookInfo = bookClient.getAllBookInfo();

        return allBookInfo;

 

    }

测试效果

启动消费端

在注册中心查看

然后访问

http://127.0.0.1:8004/get

获取到提供端的数据。

完整的代码在github上

https://github.com/Wujungang/springcloud-demo01.git

Guess you like

Origin blog.csdn.net/wjg1314521/article/details/105067300