java|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的版本
接着创建注册中心
java|Springboot整合springcloud实现分布式服务 简单demo 完整示例
文章图片

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

java|Springboot整合springcloud实现分布式服务 简单demo 完整示例
文章图片

注册中心需要继承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
java|Springboot整合springcloud实现分布式服务 简单demo 完整示例
文章图片

注册中心搭建完成,接下来我们搭建消费端和提供端
首先搭建提供端
提供端的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
java|Springboot整合springcloud实现分布式服务 简单demo 完整示例
文章图片

我们在这里的controller中只返回一个string,具体业务的话可以自己实现。我们这里只展示分布式的效果。
Autowired
private BookService bookService;
@GetMapping("/book")
public String getAllBookInfo(){
return "123";
}
Controller中的简单代码
启动服务,在监控中心查看服务
java|Springboot整合springcloud实现分布式服务 简单demo 完整示例
文章图片

然后创建消费端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注解防止,在其他位置注入CodClient时idea报错
package com.guli.edu.client;

@FeignClient("guli-vod")
@Component
public interface VodClient {
@DeleteMapping(value = "https://www.it610.com/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;

}
测试效果
启动消费端
在注册中心查看
java|Springboot整合springcloud实现分布式服务 简单demo 完整示例
文章图片

然后访问
http://127.0.0.1:8004/get
java|Springboot整合springcloud实现分布式服务 简单demo 完整示例
文章图片

获取到提供端的数据。
完整的代码在github上
【java|Springboot整合springcloud实现分布式服务 简单demo 完整示例】https://github.com/Wujungang/springcloud-demo01.git

    推荐阅读