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

  • 相关阅读:
    程序员励志语录
    javaEE的十一种技术
    gui内函数调用顺序
    m文件中函数的执行顺序
    VC++与Matlab混合编程之引擎操作详解(6)数据类型mxArray的操作
    GUI(2)
    时间管理
    Matlab GUI界面
    matlab GUI(2)
    MATLAB GUI平台
  • 原文地址:https://www.cnblogs.com/ltian123/p/13645972.html
Copyright © 2011-2022 走看看