[TOC]
## 一、分布式锁
>[warning] 不配置 `zlt.lock.lockerType` 参数,则默认为 `REDIS`
### 1.1. 编码方式
```java
/**
* 代替jdk的synchronized和Lock
*/
@Autowired
private DistributedLock locker;
public void test() {
try (
ZLock lock = locker.tryLock("lockKey", 10, TimeUnit.SECONDS);
) {
if (lock != null) {
// 此处是业务代码
} else {
throw new LockException("锁等待超时");
}
}
}
```
### 1.2. 注解方式
```java
/**
* 等同于 locker.lock("test")
*/
@Lock(key = "test")
public void test() {}
/**
* 等同于 locker.tryLock("test", 10, TimeUnit.SECONDS)
*/
@Lock(key = "test", waitTime = 10)
public void test2() {}
```
>[info] 注解加在类上则该类所有方法都会自动加锁
### 1.3. Redis锁
依赖:
```xml
<dependency>
<groupId>com.zlt</groupId>
<artifactId>zlt-redis-spring-boot-starter</artifactId>
</dependency>
```
配置:
```yml
zlt:
lock:
lockerType: REDIS
```
### 1.4. Zookeeper锁
依赖:
```xml
<dependency>
<groupId>com.zlt</groupId>
<artifactId>zlt-zookeeper-spring-boot-starter</artifactId>
</dependency>
```
配置:
```yml
zlt:
lock:
lockerType: ZK
```
## 二、分布式id生成器
```java
//生成long型id
long id = IdGenerator.getId();
//生成String型id
String id = IdGenerator.getIdStr();
```
## 三、分布式事务
### 3.1. 同步强一致性(不推荐)
基于`tx-lcn`应用例子可看`zlt-demo\txlcn-demo`工程
### 3.2. 同步最终一致性
基于`seata`应用例子可看`zlt-demo\seata-demo`工程
### 3.3. 异步最终一致性
基于`MQ`应用例子可看`zlt-demo\rocketmq-demo\rocketmq-transactional`工程
## 四、分库分表sharding-sphere
应用例子可看`zlt-demo\sharding-jdbc-demo`工程
## 五、消息队列
### 5.1. 集成Spring-Cloud-Stream+RocketMQ
应用例子可看`zlt-demo\rocketmq-demo\rocketmq-produce`和`zlt-demo\rocketmq-demo\rocketmq-consume`工程
## 六、搜索中心
### 6.1. 启动好搜索中心服务端
参考 [扩展模块](https://www.kancloud.cn/zlt2000/microservices-platform/919420) 中的`搜索中心`章节
### 6.2. 依赖`search-client`工程
需要搜索的服务需要依赖该工程
### 6.3. 添加@EnableSearchClient注解
需要在启动类或者配置类中添加该注解,开启搜索中心功能
### 6.4. 使用通用搜索
注入`com.central.search.client.service.IQueryService`
**可参考SysUserController类中用户搜索的写法**
```java
@GetMapping("/users/search")
public PageResult<JSONObject> search(SearchDto searchDto) {
searchDto.setIsHighlighter(true);
searchDto.setSortCol("createTime");
return queryService.strQuery("sys_user", searchDto, SEARCH_LOGIC_DEL_DTO);
}
```
## 七、网关zuul动态路由
开启功能需要,修改`zuul`的配置文件
```properties
zlt.gateway.dynamicRoute.enabled=true
```
详情查看:[Spring Cloud Zuul的动态路由怎样做?集成Nacos实现很简单](https://mp.weixin.qq.com/s?__biz=MjM5OTI2NDMwMg==&mid=2247483694&idx=1&sn=4bd9c5865f18f25dd3f38e1f0a9e8701&chksm=a73f686f9048e17903787b98dda5d5c74bb165c27b44a44887e23b6f534d3a54c3b6a13f1d3b&token=1502955171&lang=zh_CN#rd)
## 八、网关sc-gateway动态路由
开启功能需要,修改`sc-gateway`的配置文件
```properties
zlt.gateway.dynamicRoute.enabled=true
```
详情查看:[Spring Cloud Gateway的动态路由怎样做?集成Nacos实现很简单](https://mp.weixin.qq.com/s?__biz=MjM5OTI2NDMwMg==&mid=2247483769&idx=1&sn=2b96bf89ceada2af9fe0da9a3d3b05e1&chksm=a73f68389048e12ea2e67117de564db7e775fa919f7ba387d52171d903929aca2490e2b76ddb&token=1628962546&lang=zh_CN#rd)
## 九、如何解决开发环境的服务冲突和实例乱窜
开启功能需要每个服务都添加以下配置,可以直接修改`zlt-config`下的`application-dev.properties`配置文件就可以全局生效
```properties
zlt.ribbon.isolation.enabled=true
```
详情查看:
* [Spring Cloud开发人员如何解决服务冲突和实例乱窜?](https://mp.weixin.qq.com/s?__biz=MjM5OTI2NDMwMg==&mid=2247483710&idx=1&sn=1a75206924bb4f94679318da2a61db1a&chksm=a73f687f9048e1693ad03bdf23cf7fbe1f6f1d4d5c0620812e6e5ac64d924b36ce554fbe72de&token=15037532&lang=zh_CN#rd)
* [Spring Cloud开发人员如何解决服务冲突和实例乱窜?(IP实现方案)](https://mp.weixin.qq.com/s?__biz=MjM5OTI2NDMwMg==&mid=2247483717&idx=1&sn=9284d0f63a7f63d959d5fcfcd5fcc095&chksm=a73f68049048e1125482ec0cfff1066cad9d62b6f92aed2587957d39098a113df4c2a603a1e3&token=1758001159&lang=zh_CN#rd)
- 项目介绍
- 项目声明
- 项目简介
- 核心功能
- 运行环境
- 项目更新日志
- 文档更新日志
- 分支说明
- F&Q
- 部署教程
- 环境准备
- 必要启动模块
- 扩展模块(可选)
- 打包工程
- 开发说明
- 登录认证
- 基础功能
- 分布式功能
- Spring Boot自定义配置自动提示
- 如何新增一个服务
- 自定义配置参数清单
- 公共配置
- 授权认证中心
- 日志中心
- 搜索中心
- 文件中心
- 核心接口
- 密码模式授权
- 授权码模式授权
- 简化模式授权
- 客户端模式授权
- 手动刷新token
- 用户名+密码+验证码授权
- openId授权
- 手机号+密码授权
- 账号登出接口
- 检查token有效性
- OIDC模式授权
- 获取JWT公钥
- 系统设计
- 企业级微服务总体分层架构图
- 企业级服务认证架构设计
- 有网络隔离
- 无网络隔离V1
- 无网络隔离V2
- url级权限控制
- 多用户类型扩展
- WebSocket接口鉴权
- 授权参数加密
- 兼容旧的密码加密方式
- 数据权限
- 企业级日志解决方案设计
- 企业级监控架构设计(Metrics)
- 框架技术选型
- 架构设计方法论思维导图
- 系统幂等性设计与实践
- 分布式ID生成器解决方案
- 实时搜索系统设计
- 企业级功能
- alibaba/nacos注册中心
- 介绍与相关资料
- 设计模型
- 部署
- 配置中心
- 服务注册发现
- 生产部署方案
- 通过Nginx来实现环境隔离
- 统一日志中心详解
- 介绍与相关资料
- docker安装部署
- 安装包部署(6.x版本)
- elasticsearch 6.x
- logstash 6.x
- kibana 6.x
- 安装包部署(7.x版本+xpack)
- elasticsearch 7.x
- logstash 7.x
- kibana 7.x
- Filebeat安装部署
- ES索引管理
- 定时任务定期删除
- Index Lifecycle Management
- 没数据问题排查思路
- Logstash
- Grok语法调试
- Grok常用表达式
- 配置语法中的条件判断
- ELK自身各组件监控
- ELK多租户方案
- 慢查询sql详解
- 审计日志-elk详解
- alibaba/sentinel限流熔断
- 介绍与相关资料
- 使用示范
- 动态规则扩展
- 生产应用
- 网关流控
- JWT的RSA非对称密钥生成
- Docker
- 安装(外网)
- 安装(内网)
- 构建项目镜像(免Dockerfile文件)
- APM监控-SkyWalking
- 介绍与相关资料
- APM系统简单对比(zipkin,pinpoint和skywalking)
- server安装部署
- agent安装
- 日志信息清理
- Metrics监控
- 介绍与相关资料
- 安装部署
- 各组件监控
- Grafana仪表盘模板下载
- Grafana告警配置
- 分布式事务
- 基础概念和理论
- TX-LCN(同步场景)
- SEATA(同步场景)(v1.3)
- RocketMQ(异步场景)
- MySQL
- 主从复制
- 主从切换
- 主主复制
- 高可用方案
- Redis
- 单机
- 主从复制
- 主从复制+哨兵
- cluster集群
- 持久化方案
- 数据库之分库分表
- 分库分表思路
- 分库分表部署上线方式
- ShardingSphere配置
- 消息队列
- 消息队列对比参照表
- Spring-Cloud-Stream消息框架
- RocketMQ
- 介绍与相关资料
- 安装部署
- 常见异常处理
- RocketMQ事务消息原理
- Kafka
- 介绍与相关资料
- 应用场景
- 安装部署
- 集群部署
- Kafka Connect
- 分布式文件系统
- FastDFS
- 介绍与相关资料
- 特性详解
- 文件系统的对比
- 安装部署
- MinIO
- Canal数据库日志解析消费
- 介绍与相关资料
- 安装部署
- 高可用架构部署
- 实时同步数据到ElasticSearch
- 全量同步数据到ElasticSearch
- 多租户(应用隔离)
- 技术介绍与隔离方案
- 本项目实现详解
- 分布式日志链路跟踪
- 单点登录
- 单点登录详解
- 前后端分离的单点登录
- OIDC协议单点登录
- 单点登出详解
- Zookeeper集群搭建
- Spring
- 升级 Spring Boot 2.5 与 Spring Cloud 2020 注意要点
- 企业开发环境搭建
- 研发项目管理软件(禅道)
- Maven私服
- 安装部署
- 使用介绍
- Docker私有镜像仓库
- 安装部署
- 使用介绍
- 容器管理平台
- 介绍与相关资料
- 安装部署
- 使用介绍
- 持续集成部署CICD
- 持续交付的含义
- 影响持续交付的因素
- 代码分支策略选择
- CICD流程设计
- 代码仓库Gitlab
- 安装部署
- 免密访问
- webhook配置
- 自动化部署Jenkins
- 安装部署
- ssh免密登录
- 流水线简单例子
- 流水线参数化构建例子
- 静态代码测试SonarQube
- 应用性能
- 压力测试工具
- 介绍和安装
- 使用介绍
- JVM
- JVM性能调优
- 常见JVM内存错误及解决方案
- JVM 分析工具详解
- Spring Cloud性能调优
- Elasticsearch性能优化
- 我的GitChat
- Spring Boot集成Elasticsearch7.x详解
- 微服务统一日志方案ELK7.x落地实战
- Redisson 分布式锁详解与可视化监控方案
- 交流反馈
- 云服务器购买优惠