新技术

typora
markdown编写软件之一

观察者模式
监听者
实现 implements ApplicationListener<Observable>
重写 public void onApplicationEvent(Observable event)
被监听者
继承 extends ApplicationEvent

调用
applicationContext.publishEvent(event);
使用观察者模式可以让修改后的状态,通知同一模块中的其他部分进行处理数据。


kafka
zookeeper,依赖注册中心,

消费
@KafkaListener(topics = {"message"})
public void listen(ConsumerRecord<?, ?> record)

生产
kafkaTemplate.send("uap_test", "test_key",message)

fegin
调用
@FeignClient("test-messagereceiver")//服务名
启动类
@EnableFeignClients

微服务之间调用,基于注册中心,

redis

es
使用场景,日志,文件库,查询,
继承extends UnsynchronizedAppenderBase<LoggingEvent>
重写配置config
log添加es

eureka
注册中心
配置即可

seata
分布式事务

需要有服务端

docker
仓库,镜像,容器,分区域运行,互不干扰
运维部署快速,

mybaties plus
jdbc

generator
代码自动生成

swagger
maven配置
@Api(tags = {"账号"})
@ApiOperation("查询").

1、接口的文档在线自动生成
2、功能测试

正式环境设置开关关闭
项目代码中通过注解添加注释后,能自动生成api文档,以及前端控制器,能测试功能。

zuul
zipkin

redis 分布式事务锁
/**
* 加锁
* @param key seckillId
* @param value 当前时间+超时时间
* @return
*/
public boolean lock(String key, String value) {
// 可以设置返回true
Boolean isLock = redisTemplate.opsForValue().setIfAbsent(key, value);
if (isLock) {
return true;
}
String currentValue = redisTemplate.opsForValue().get(key);
// 如果锁已经过期
if (!StringUtils.isEmpty(currentValue)
&& Long.valueOf(currentValue) < System.currentTimeMillis()) {
// 获取上一个锁的时间,并设置新锁的时间
String oldValue = redisTemplate.opsForValue().getAndSet(key, value);
if (!StringUtils.isEmpty(oldValue)
&& oldValue.equals(currentValue)) {
log.info("锁过期并返回true");
return true;
}
}
return false;
}

/**
* 解锁
* @param key
* @return
*/
public void unlock(String key, String value) {
try {
String currentValue = redisTemplate.opsForValue().get(key);
if (!StringUtils.isEmpty(currentValue)
&& currentValue.equals(value)) {
redisTemplate.opsForValue().getOperations().delete(key);
}
} catch (Exception e) {
log.error("redis分布式锁,解锁异常:"+e.getMessage());
}

}

测试锁
long currentTimeMills = System.currentTimeMillis();
String redisLockValue = String.valueOf(currentTimeMills + 20000);
if(lock.lock("redisTest", redisLockValue)){
Thread.sleep(10000);
lock.unlock("redisTest",redisLockValue);
return true;
}else
{
return false;
}

原文地址:https://www.cnblogs.com/ltian123/p/13645972.html