Springboot整合springcloud实现分布式服务 简单demo 完整示例

Springboot整合springcloud实现分布式服务

一:创建一个maven项目作为父工程,管理依赖版本

com.springcloud

    parent

    1.0-SNAPSHOT

    pom

父工程的pom文件如下

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

    4.0.0

 

    com.springcloud

    parent

    1.0-SNAPSHOT

    pom

 

   

        ../register-center

        ../provider

        ../consumer

   

 

 

   

        org.springframework.boot

        spring-boot-starter-parent

        2.0.7.RELEASE

       

   

 

   

        1.8

        0.0.1-SNAPSHOT

        3.0.5

        2.0

        2.7.0

       

   

 

   

       

            org.springframework.boot

            spring-boot-starter-web

       

 

       

            org.springframework.boot

            spring-boot-starter-test

            test

       

   

   

       

 

           

           

               

               

               

           

           

           

               

               

               

           

 

           

           

                io.springfox

                springfox-swagger2

                ${swagger.version}

           

           

                io.springfox

                springfox-swagger-ui

                ${swagger.version}

           

 

 

           

           

                com.baomidou

                mybatis-plus-boot-starter

                ${mybatis-plus.version}

           

 

           

           

                org.apache.velocity

                velocity-engine-core

                ${velocity.version}

           

 

 

 

           

           

                org.springframework.cloud

                spring-cloud-dependencies

                Finchley.SR2

                pom

                import

           

       

   

 

   

       

           

                org.springframework.boot

                spring-boot-maven-plugin

           

       

 

       

            

                src/main/java

               

                    **/*.xml

               

                false

           

       

   

 

 

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

接着创建注册中心

Springboot整合springcloud实现分布式服务 简单demo 完整示例_第1张图片

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

 

Springboot整合springcloud实现分布式服务 简单demo 完整示例_第2张图片

注册中心需要继承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

Springboot整合springcloud实现分布式服务 简单demo 完整示例_第3张图片

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

首先搭建提供端

提供端的pom文件

         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

    4.0.0

   

        com.springcloud

        parent

        1.0-SNAPSHOT

   

 

    com.springcloud

    provider

    0.0.1-SNAPSHOT

    provider

    Demo project for Spring Boot

 

   

        1.8

   

 

   

       

       

            org.springframework.cloud

            spring-cloud-starter-netflix-eureka-client

       

 

       

       

            com.baomidou

            mybatis-plus-boot-starter

            3.0.5

       

 

       

       

            mysql

            mysql-connector-java

 

       

 

       

       

            org.apache.velocity

            velocity-engine-core

       

 

       

       

            io.springfox

            springfox-swagger2

       

       

            io.springfox

            springfox-swagger-ui

       

 

       

       

            org.projectlombok

            lombok

       

   

 

   

       

           

                org.springframework.boot

                spring-boot-maven-plugin

           

       

   

 

配置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

Springboot整合springcloud实现分布式服务 简单demo 完整示例_第4张图片

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

Autowired

    private BookService bookService;

    @GetMapping("/book")

    public String getAllBookInfo(){

        return "123";

    }

Controller中的简单代码

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

然后创建消费端consumer

         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

    com.springcloud

    parent

    1.0-SNAPSHOT

com.springcloud

consumer

0.0.1-SNAPSHOT

consumer

Demo project for Spring Boot

 

    1.8

 

 

   

   

        org.springframework.cloud

        spring-cloud-starter-netflix-eureka-client

   

 

   

   

   

   

   

   

 

   

   

        mysql

        mysql-connector-java

 

   

 

   

   

   

   

   

 

   

   

   

   

   

   

   

   

   

 

   

   

   

   

   

 

   

   

        org.springframework.cloud

        spring-cloud-starter-openfeign

   

 

   

       

            org.springframework.boot

            spring-boot-maven-plugin

       

   

 

 

在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;

 

    }

测试效果

启动消费端

在注册中心查看

Springboot整合springcloud实现分布式服务 简单demo 完整示例_第5张图片

然后访问

http://127.0.0.1:8004/get

获取到提供端的数据。

完整的代码在github上

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

你可能感兴趣的:(java,springboot,springcloud)