zoukankan      html  css  js  c++  java
  • 新技术

    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;
    }

  • 相关阅读:
    20145231第九周学习笔记
    20145231第八周学习笔记
    20145231《Java程序设计》第三次实验报告
    20145231第七周学习笔记
    20145231《Java程序设计》第二次实验报告
    测试「20200912测试总结」
    题解「Luogu4774 [NOI2018]屠龙勇士」
    总结「斯坦纳树」
    题解「AT1226 電圧」
    题解「AT1983 [AGC001E] BBQ Hard」
  • 原文地址:https://www.cnblogs.com/ltian123/p/13645972.html
Copyright © 2011-2022 走看看