07 微服务项目的搭建
微服务项目的搭建
简述一下:
会使用到 nacos openfegin sentinel
三个微服务模块 一个基础服务模块 注意:文中所有的依赖都是引入到基础服务模块 base中
三个微服务模块继承与基础服务模块 可以做到依赖共享
- service-base 基础服务模块
- service-core 主服务模块
- service-oss 文件存储服务模块
- service-sms 短信服务模块
1 nacos的配置
1、Nacos下载和安装
下载地址:https://github.com/alibaba/nacos/releases
2、Windows启动Nacos
参考:https://github.com/alibaba/nacos
解压:将下载的压缩包解压
启动:startup.cmd -m standalone
3、访问
用户名密码:nacos/nacos
4、引入依赖
<!--服务发现--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
5、添加服务配置信息
在需要注册到注册中心的微服务放入配置文件中添加配置
#spring: cloud: nacos: discovery: server-addr: localhost:8848 # nacos服务地址
6、启动微服务
启动已注册的微服务,查看 “服务管理 => 服务列表”,可就以看到已注册的微服务
2 OpenFeign的引入
1、引入依赖
service-base模块中配置OpenFeign的依赖(实际是在服务消费者端需要OpenFeign的依赖)
<!--服务调用--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
2、启动类添加注解
在service-sms的启动类添加如下注解
因为service-sms是消费者 需要开启feign的远程调用
@EnableFeignClients
我们这里以注册业务为例 在发送注册验证码的时候 我们需要判断用户有没有注册过 所以需要在短信模块中远程调用接口 判断用户是否注册过 判断用户是否注册过的接口处在另一模块中
服务提供者接口信息
需要在消费者端创建一个接口 学过的都懂
服务消费者 也就是短信服务
需要向那个服务发送远程调用
@FeignClient(value = "service-core")// nacos中远程调用的名称 public interface CoreUserInfoClient { // 远程调用的完整路径 参数跟提供者一致 @GetMapping("/api/core/userInfo/checkMobile/{mobile}") boolean checkMobile(@PathVariable String mobile); }
这样也大概实现的远程调用 但是有没有可能会发生这种情况
远程调用超时了呢 解决办法: 配置更大的超时时间
默认openFeign的超时时间只有1秒钟
可以在配置文件中添加如下配置:是消费端配置哦
远程调用出错了呢
配置容错措施 用sentinel实现 后面会说
feign: client: config: default: connectTimeout: 10000 #连接超时配置 readTimeout: 600000 #执行超时配置
3、日志
不知道你们会不会有这样的疑问 我们怎么知道远程调用是否成功了呢 不能只看报错信息吧 openFeign也提供了日志功能 下面看看吧
1、作用
OpenFeign提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解OpenFeign中Http请求的细节。即对OpenFeign远程接口调用的情况进行监控和日志输出。
2、日志级别
- NONE:默认级别,不显示日志
- BASIC:仅记录请求方法、URL、响应状态及执行时间
- HEADERS:除了BASIC中定义的信息之外,还有请求和响应头信息
- FULL:除了HEADERS中定义的信息之外,还有请求和响应正文及元数据信息
3、配置日志bean
在service-base中创建配置文件 也就是基础服务模块
@Configuration public class OpenFeignConfig { @Bean Logger.Level feignLoggerLevel(){ return Logger.Level.FULL; } }
4、开启日志
sms的application.yml中指定监控的接口,以及日志级别
CoreUserInfoClient 发送远程调用的接口
logging: level: com.atguigu.srb.sms.client.CoreUserInfoClient: DEBUG #以什么级别监控哪个接口
5、监控到的日志
HTTP 是一种无状态协议,客户端向服务器发送一个 TCP 请求,服务端响应完毕后断开连接。
如果客户端向服务器发送多个请求,每个请求都要建立各自独立的连接以传输数据。
HTTP 有一个 KeepAlive 模式,它告诉 webserver 在处理完一个请求后保持这个 TCP 连接的打开状态。
若接收到来自客户端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接。
KeepAlive 在一段时间内保持打开状态,它们会在这段时间内占用资源。占用过多就会影响性能。
timeout 来指定 KeepAlive 的超时时间(timeout)。指定每个 TCP 连接最多可以保持多长时间。
3 sentinel 服务容错
在服务发送错误时 消费端的一种容错模式
1、引入依赖
service-base中引入sentinel依赖
<!--服务容错--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency>
2、开启Sentinel支持
在service-sms的yml配置文件中开启Feign对Sentinel的支持
#开启Feign对Sentinel的支持 #feign: sentinel: enabled: true
3、创建容错类
fallback:当无法校验手机号是否已注册时,直接发送短信
package com.atguigu.sms.client.fallback; import com.atguigu.sms.client.CoreUserInfoClient; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; /** * 对远程服务调用的容错措施 * @author : look-word * @date : 2022-05-22 19:14 **/ @Slf4j @Service public class CoreUserInfoClientFallBack implements CoreUserInfoClient { @Override public boolean checkMobile(String mobile) { log.info("远程调用失败 除法服务熔断 service-core/api/core/userInfo/checkMobile/"+mobile); return false; } }
4、指定熔断类
为OpenFeign远程调用接口添加fallback属性值没指定容错类
CoreUserInfoClient 远程调用接口哦
@FeignClient(value = "service-core", fallback = CoreUserInfoClientFallback.class) public interface CoreUserInfoClient {
5、测试
停止core微服务测试
我们可以看到 服务容错生效
- [svn] 一个版本库对应一个项目 svn服务务器搭建 祥解
- 论:微服务项目搭建,到底要不要聚合工程?
- idea下用maven创建并搭建dubbox微服务环境项目(三)——开发consume
- soa-面向服务项目搭建
- idea下用maven创建并搭建dubbox微服务环境项目(五)—综合整理及总结
- SpringCloud微服务入门:使用idea搭建第一个微服务项目(附源码)
- dubbo zk 分布式服务项目搭建与配置
- [BI项目记]-搭建代码管理环境之服务端
- 从壹开始微服务 [ DDD ] 之二 ║ DDD入门 & 项目结构粗搭建
- Maven-maven多模块项目搭建+Dubbo分布式服务框架 budong
- jk——Git+Github+Springboot+Idea关于第一次自己搭项目(搭建微服务系列)
- 搭建maven项目,并实现Dubbo分布式服务管理
- webservice之xfire服务搭建及客户端请求(maven搭建项目)
- SpringCloud学习(二):微服务入门实战项目搭建
- springboot 构建 spring cloud 微服务项目 搭建ARTHUR框架分享
- 新手学习微服务SpringCloud项目架构搭建方法
- 微信小程序语音识别服务搭建全过程解析(项目开源在github)
- .Net Core 商城微服务项目系列(十三):搭建Log4net+ELK+Kafka日志框架
- 微服务项目框架搭建
- idea+spring boot+dubbox搭建微服务SSM框架环境项目(maven-图文并解)