/**
* jwt工具类
*/
public class JWTUtils {
// 签发人
private static final String ISSUSER = "itbaizhan";
//过期时间 5分钟
private static final long TOKEN_EXPIRE_TIME = 5*60*1000;
private static final String KEY = "WEAWEA..ASDA-=";
/**
* 生成令牌
*/
public static String token(){
Date now = new Date();
Algorithm algorithm =Algorithm.HMAC256(KEY);
//创建JWT
String token = JWT.create()
//签发人
.withIssuer(ISSUSER)
.withIssuedAt(now)
.withExpiresAt(new Date(now.getTime() + TOKEN_EXPIRE_TIME))
.sign(algorithm);
return token;
}
public static boolean verify(String token){
try {
Algorithm algorithm = Algorithm.HMAC256(KEY);
//1.验证令牌
JWTVerifier verifier = JWT.require(algorithm)
//签发人
.withIssuer(ISSUSER)
.build();
verifier.verify(token);
return true;
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (JWTVerificationException e) {
e.printStackTrace();
}
return false;
}
public static void main(String[] args) {
//1.生成令牌
// String token = token();
// System.out.println(token);
boolean verify = verify("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJpdGJhaXpoYW4iLCJleHAiOjE2NTgyNDM2NjgsImlhdCI6MTY1ODI0MzM2OH0.C7yjrLgaBvCg0WYMrQymJotkfaAOURGogn04Yb6oIXQ");
System.out.println(verify);
}
}


生产者配置:

消费者的配置:


解压nacos并且指定路径

sh startup.sh -m standalone 端口号默认8848
jps:查看进程
启动服务器 注意: standalone代表着单机模式运行
docker pull nacos/nacos-server
docker run --name nacos -d -p 8848:8848 -e MODE=standalone -e NACOS_SERVER_IP=192.168.66.100 nacos/nacosserver

server:
port: 80
spring:
application:
name: order-consumer
cloud:
nacos:
discovery:
#Nacos服务地址
server-addr: 192.168.176.100:8848
feign:
client:
config:
default:
#网络连接阶段超时时间
connectTimeout: 1000
#服务远程调用响应超时时间
readTimeout: 2000
远程调用需要加loaderbalancer
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Tfm4Dom-1661264866941)(C:\Users\caituxinchu\AppData\Roaming\Typora\typora-user-images\image-20220729230106266.png)]

被调用的请求

诸如服务产生超时报错 这时可以使用降级兜底方法
com.alibaba.cloud
spring-cloud-starter-alibaba-sentinel
feign:
sentinel:
enabled: true
Dubbo不需要控制层,只需要一个实现类注册上去就可以调用

Dubbo注册生产者
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.boot
spring-boot-starter-web
org.projectlombok
lombok
1.18.24
org.springframework.boot
spring-boot-actuator
com.alibaba.cloud
spring-cloud-starter-dubbo
org.itbaizhan
cloud-service-api
1.0-SNAPSHOT
yml:配置
server:
port: 8001
spring:
#解决循环依赖问题
main:
allow-bean-definition-overriding: true
allow-circular-references: true
application:
name: payment-provider-dubbo
#nacos注册
cloud:
nacos:
discovery:
#Nacos服务器地址
server-addr: 192.168.176.100:8848
#dubbo配置
dubbo:
scan:
base-packages: com.itbaizhan.service
registry:
#注册地址
address: nacos://192.168.176.100:8848
timeout: 10000
protocol:
#Dubbo暴露的协议的配置dubbo
name: dubbo
#端口从20880开始自增
port: -1
Dubbo注册只需要实现接口就能注册到Dubbo中
@DubboService(timeout = 5000,methods = {@Method(name = "index",retries = 2)})
public class PaymentServiceImpl implements IPaymentService {
@Override
public String index() {
return null;
}
}
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.boot
spring-boot-starter-web
org.projectlombok
lombok
1.18.24
org.springframework.boot
spring-boot-actuator
org.itbaizhan
cloud-service-api
1.0-SNAPSHOT
com.alibaba.cloud
spring-cloud-starter-dubbo
#yml配置
server:
port: 80
spring:
#解决循环依赖问题
main:
allow-bean-definition-overriding: true
allow-circular-references: true
application:
name: payment-consumer-dubbo
#nacos注册
cloud:
nacos:
discovery:
#Nacos服务器地址
server-addr: 192.168.176.100:8848
#dubbo配置
dubbo:
cloud:
#订阅服务的服务名 * 订阅所有服务 订阅多个可以使用逗号
subscribed-services: "*"
registry:
#注册地址
address: nacos://192.168.176.100:8848
timeout: 10000
protocol:
#Dubbo暴露的协议的配置dubbo
name: dubbo
#端口从20880开始自增
port: -1
@RestController
@RequestMapping("order")
public class OrderController {
@Autowired
private OrderService orderService;
// 测试Dubbo的远程调用
@GetMapping("index")
public String index(){
return orderService.index();
}
}
/**
* 订单业务层
*/
@Service
public class OrderService {
//支付服务远程调用Dubbo的实现类
@DubboReference
private IPaymentService iPaymentService;
public String index(){
return iPaymentService.index();
}
}
####### 6中服务降级策略



配置文件名:服务名-环境.文件后缀 consumer-dev-yaml
组不同 配置文件不同 (区别不用的项目)
使用组来区分不同的项目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kQPZ3EPA-1661264866946)(C:\Users\caituxinchu\AppData\Roaming\Typora\typora-user-images\image-20220730224432080.png)]
server:
port: 3344
spring:
application:
name: nacos-config
cloud:
nacos:
discovery:
server-addr: 192.168.176.100:8848
config:
#Nacos服务器地址
server-addr: 192.168.176.100:8848
#命名空间 不指定命名空间默认为public 指定命名空间的UUID
namespace: 49963e38-2296-42e4-9cb4-bccf14418c1b
#不指定就是默认的DEFAULT_GROUP
group: DEFAULT_GROUP
#文件名 spring-application-name
prefix: nacos-config
#prefix: spring.application.name
#后缀
file-extension: yaml
#指定环境 为dev 如果没写环境就可以不必指定
profiles:
active: dev
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
org.springframework.cloud
spring-cloud-starter-bootstrap
org.springframework.boot
spring-boot-starter-web
org.projectlombok
lombok
1.18.24
org.springframework.boot
spring-boot-actuator
@RefreshScope 只需要加载主启动类上即可
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x6sQDQyJ-1661264866947)(C:\Users\caituxinchu\AppData\Roaming\Typora\typora-user-images\image-20220730232547556.png)]](https://1000bd.com/contentImg/2023/06/14/162132782.png)
同样都需要加入配置中心依赖和bootstrap依赖
消费者
spring:
application:
name: payment-provider-dubbo
main:
allow-bean-definition-overriding: true
allow-circular-references: true
cloud:
nacos:
config:
#Nacos服务器地址
server-addr: 192.168.176.100:8848
#命名空间 不指定命名空间默认为public 指定命名空间的UUID
namespace: 49963e38-2296-42e4-9cb4-bccf14418c1b
#不指定就是默认的DEFAULT_GROUP
group: DEFAULT_GROUP
#文件名 spring-application-name
prefix: payment-provider-dubbo
#prefix: spring.application.name
#后缀
file-extension: yaml
#指定环境 为dev 如果没写环境就可以不必指定
profiles:
active: dev
spring:
application:
name: payment-consumer-dubbo
main:
allow-bean-definition-overriding: true
allow-circular-references: true
cloud:
nacos:
config:
#Nacos服务器地址
server-addr: 192.168.176.100:8848
#命名空间 不指定命名空间默认为public 指定命名空间的UUID
namespace: 49963e38-2296-42e4-9cb4-bccf14418c1b
#不指定就是默认的DEFAULT_GROUP
group: DEFAULT_GROUP
#文件名 spring-application-name
prefix: payment-consumer-dubbo
#prefix: spring.application.name
#后缀
file-extension: yaml
#指定环境 为dev 如果没写环境就可以不必指定
profiles:
active: dev
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RgtfkkTi-1661264866948)(C:\Users\caituxinchu\AppData\Roaming\Typora\typora-user-images\image-20220731125238834.png)]](https://1000bd.com/contentImg/2023/06/14/162131605.png)
Setinel搭建
java -Dserver.port=8878 -Dcsp.sentinel.dashboard.server=192.168.176.100:8878 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.3.jar
docker pull docker.io/bladex/sentinel-dashboard
docker run --name sentinel --restart=always -d -p 8888:8858 docker.io/bladex/sentinel-dashboard
Sentinel流控:直接 快速失败

默认只会对Controller层进行监控,
如果想对service层进行监控则需要加上注解@SentinelResource("goods ")
对goods的 /query/goods入口进行限流

冷启动主要用来解决服务刚刚启动 ,一切资源尚未初始化




避免高并发引起的服务故障 通过外部流量控制


业务的响应时长(RT)大于指定时长的请求认定为慢调用请求。在 指定时间内,如果请求数量超过设定的最小数量,慢调用比例大于 设定的阈值,则触发熔断。
统计指定时间内的调用,如果调用次数超过指定请求数,并且出现 异常的比例达到设定的比例阈值(或超过指定异常数),则触发熔 断。


![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7poz84xD-1661264866954)(C:\Users\caituxinchu\AppData\Roaming\Typora\typora-user-images\image-20220801143615417.png)]](https://1000bd.com/contentImg/2023/06/14/162132769.png)
白名单:允许访问
黑名单:不允许访问
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xJh8IL0I-1661264866955)(C:\Users\caituxinchu\AppData\Roaming\Typora\typora-user-images\image-20220801145825140.png)]](https://1000bd.com/contentImg/2023/06/14/162131657.png)
server:
port: 9090
spring:
application:
name: gateway #应用名字
cloud:
nacos:
discovery:
server-addr: 192.168.176.100:8848
gateway:
routes:
- id: payment # 路由名字 当前页面不重复即可
uri: lb://payment-provider-sentinel #lb是负载均衡
predicates:
- Path=/payment/* #断言匹配即可跳到uri地址
org.springframework.boot
spring-boot-starter
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.cloud
spring-cloud-starter-gateway
org.projectlombok
lombok
org.springframework.cloud
spring-cloud-starter-loadbalancer
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8NzAVmOx-1661264866955)(C:\Users\caituxinchu\AppData\Roaming\Typora\typora-user-images\image-20220801160638978.png)]](https://1000bd.com/contentImg/2023/06/14/162130419.png)


top




![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r4p9vmmK-1661264866958)(C:\Users\caituxinchu\AppData\Roaming\Typora\typora-user-images\image-20220801214749883.png)]](https://1000bd.com/contentImg/2023/06/14/162132098.png)
原子性:要么全部成功,要么全部失败,具有原子性。
一致性: A转给B100,转账前相加的金额和转账后相加的金额一致。
隔离性:两个事务之间,相互不干扰。
持久性:该事物的更改会被更改到数据库中,不会被回滚。
订单微服务生成订单的时候会调用库存微服务来减少库存。各个微服务是部署在不同JVM进程中,此时就会产生因跨JVM进程而导致的分布式事务问题。
退款会调用订单数据库和交易数据库,需要通过不同的数据库连接会话来操作数据库中的数据,因此产生了分布式事务。
例如,订单微服务和库存微服务访问同一个数据库也会产生分 布式事务,原因是:多个微服务访问同一个数据库,本质上也 是通过不同的数据库会话来操作数据库,此时就会产生分布式 事务。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-88zmVdHG-1661264866959)(C:\Users\caituxinchu\AppData\Roaming\Typora\typora-user-images\image-20220801232147712.png)]](https://1000bd.com/contentImg/2023/06/14/162130611.png)
