[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 ``` &nbsp; ## 二、分布式id生成器 ```java //生成long型id long id = IdGenerator.getId(); //生成String型id String id = IdGenerator.getIdStr(); ``` &nbsp; ## 三、分布式事务 ### 3.1. 同步强一致性(不推荐) 基于`tx-lcn`应用例子可看`zlt-demo\txlcn-demo`工程 ### 3.2. 同步最终一致性 基于`seata`应用例子可看`zlt-demo\seata-demo`工程 ### 3.3. 异步最终一致性 基于`MQ`应用例子可看`zlt-demo\rocketmq-demo\rocketmq-transactional`工程 &nbsp; ## 四、分库分表sharding-sphere 应用例子可看`zlt-demo\sharding-jdbc-demo`工程 &nbsp; ## 五、消息队列 ### 5.1. 集成Spring-Cloud-Stream+RocketMQ 应用例子可看`zlt-demo\rocketmq-demo\rocketmq-produce`和`zlt-demo\rocketmq-demo\rocketmq-consume`工程 &nbsp; ## 六、搜索中心 ### 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); } ``` &nbsp; ## 七、网关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) &nbsp; ## 八、网关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) &nbsp; ## 九、如何解决开发环境的服务冲突和实例乱窜 开启功能需要每个服务都添加以下配置,可以直接修改`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)