Springboot整合springcloud实现分布式服务
一:创建一个maven项目作为父工程,管理依赖版本
parent 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"> parent pom spring-boot-starter-parent 2.7.0 spring-boot-starter-web spring-boot-starter-test test springfox-swagger2 springfox-swagger-ui mybatis-plus-boot-starter velocity-engine-core spring-cloud-dependencies import spring-boot-maven-plugin |
接着创建注册中心
文章图片
注册中心需要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文件
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> parent provider spring-cloud-starter-netflix-eureka-client mybatis-plus-boot-starter mysql-connector-java velocity-engine-core springfox-swagger2 springfox-swagger-ui lombok spring-boot-maven-plugin |
# 服务端口 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 |
在客户端微服务启动类中添加注解
@EnableEurekaClient
文章图片
我们在这里的controller中只返回一个string,具体业务的话可以自己实现。我们这里只展示分布式的效果。
Autowired private BookService bookService; @GetMapping("/book") public String getAllBookInfo(){ return "123"; } |
启动服务,在监控中心查看服务
文章图片
然后创建消费端consumer
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> parent consumer spring-cloud-starter-netflix-eureka-client mysql-connector-java spring-cloud-starter-openfeign 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; } |
启动消费端
在注册中心查看
文章图片
然后访问
http://127.0.0.1:8004/get
文章图片
获取到提供端的数据。
完整的代码在github上
【java|Springboot整合springcloud实现分布式服务 简单demo 完整示例】https://github.com/Wujungang/springcloud-demo01.git
推荐阅读
- 数据库|太强了!这款轻量级的数据库中间件完美解决了Spring Boot 中分库分表问题
- 代码狂魔|工欲善其事必先利其器,IDEA必装插件!
- java|java常用依赖整理
- JavaEE进阶|JavaEE进阶 - Spring Boot 配置文件 - 细节狂魔
- mysql|Mysql时区显示
- 【Java面试】什么是IO的多路复用机制()
- 经验分享|拥抱新技术(你需要考虑的方面)
- 算法|基于MATLAB的图像去噪与边缘检测技术
- java|抖音API接口(item_search-根据关键词取商品列表)