美文网首页
猿创征文 第二季| #「笔耕不辍」--生命不息,写作不止#

猿创征文 第二季| #「笔耕不辍」--生命不息,写作不止#

作者: 学习微站 | 来源:发表于2022-10-26 13:38 被阅读0次

idea机器扛不住的可以这么设置一下(启动慢

mybatis-plus批量更新

1.service方式
UpdateWrapper updateWrapper = new UpdateWrapper<>();
updateWrapper.lambda()
.in(字段名, ids);
val xxxteEntity = new xxxteEntity();
xxxteEntity.set字段名(字段值);
//xxxteEntity 修改后的实体
int num= xxxMapper.update(xxxteEntity,updateWrapper); 2.mapper方式

UpdateWrapper updateWrapper = new UpdateWrapper<>();
updateWrapper.lambda()
.in(xxxEntity::getId, ids); .set(xxxEntity::字段名,修改的值);

    boolean res= xxService.update(updateWrapper);
  • 1

@SuppressWarnings(“PMD“) //CHECKSTYLE:OFF

过滤发包校验

feign调用

feign调用
@Component
public class CollectionShopCompareFallbackFactory implements FallbackFactory<ICollectionShopCompareRemoteService> {

    @Override
    public ICollectionShopCompareRemoteService create(Throwable throwable) {
        return null;
    }
}




@FeignClient(contextId = "collectionShopCompareRemoteService", name = "saas-collect-server",
        url = "${feign.server.collect-url}", fallbackFactory = CollectionTemplateServiceFallbackFactory.class)
public interface ICollectionShopCompareRemoteService {
    
}


    collect-url: http://localhost:31514

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

日志:切面

日志:切面 /**

  • @description: 系統操作日志切面,用户对系统操作进行记录
    **/
    @Slf4j
    //作用是把当前类标识为一个切面供容器读取
    @Aspect
    @Component public class SysOperatorLogAspect extends CommonController {

    @Resource
    private ISysOperatorLogRemoteService sysOperatorLogService;
    @Resource
    private EncodeDecodeService encodeDecodeService;
    @Resource private Environment environment;

    /**
     * Advice(通知、切面): 某个连接点所采用的处理逻辑,也就是向连接点注入的代码, AOP在特定的切入点上执行的增强处理。
     * @Before: 标识一个前置增强方法,相当于BeforeAdvice的功能.
     * @After: final增强,不管是抛出异常或者正常退出都会执行.
     * @AfterReturning: 后置增强,似于AfterReturningAdvice, 方法正常退出时执行.
     * @AfterThrowing: 异常抛出增强,相当于ThrowsAdvice.
     * @Around: 环绕增强,相当于MethodInterceptor.
     * JointPoint(连接点):程序运行中的某个阶段点,比如方法的调用、异常的抛出等。
     * Pointcut(切入点):   JoinPoint的集合,是程序中需要注入Advice的位置的集合,指明Advice要在什么样的条件下才能被触发,在程序中主要体现为书写切入点表达式。
     * Advisor(增强): 是PointCut和Advice的综合体,完整描述了一个advice将会在pointcut所定义的位置被触发。
     * @Aspect(切面): 通常是一个类的注解,里面可以定义切入点和通知
     * AOP Proxy:AOP框架创建的对象,代理就是目标对象的加强。Spring中的AOP代理可以使JDK动态代理,也可以是CGLIB代理,前者基于接口,后者基于子类。
     */
    @Pointcut(value = "@annotation(com.shuwei.sscm.saas.admin.annotate.SysLogAnnotate)")
    public void annotateCut() {
    }

    //标识一个前置增强方法,相当于BeforeAdvice的功能,相似功能的还有
    @Before(value = "annotateCut()")
    public void before(JoinPoint joinPoint) {
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        Method method = signature.getMethod();
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        SysLog sysOperatorLog = new SysLog();
        String argsStr = Arrays.toString(joinPoint.getArgs());
        if (StringUtils.isNotBlank(argsStr) && argsStr.length() > 2000) {
            argsStr = argsStr.substring(0, 2000);
        }
        // 自定义注解
        /**
         * @Target({ElementType.TYPE, ElementType.METHOD})
         * @Retention(RetentionPolicy.RUNTIME)
         * @Inherited
         * @Documented
         * public @interface SysLogAnnotate {
         *
         *     String title() default "";
         *
         *     String action() default "";
         *
         *     ClientEnum client() default ClientEnum.PC;
         *
         * }
         */
        SysLogAnnotate sysLogAnnotate = method.getAnnotation(SysLogAnnotate.class);
        HttpServletRequest request = attributes.getRequest();
        sysOperatorLog.setTitle(sysLogAnnotate.title());
        sysOperatorLog.setAction(sysLogAnnotate.action());
        sysOperatorLog.setClient(sysLogAnnotate.client().getType());
        sysOperatorLog.setRequestParam(argsStr);
        sysOperatorLog.setRequestUri(request.getRequestURI());
        sysOperatorLog.setGmtCreate(DateUtils.getNow());
        String token = request.getHeader("Authorization");
        // 用户信息
        MchUser user = getCurrentUser();
        if (null != user && StringUtils.isNotEmpty(token)) {
            sysOperatorLog.setMerchantId(user.getBelongId());
            sysOperatorLog.setUserId(user.getId());
            sysOperatorLog.setUserName(user.getName());
            String telPhone = user.getTelphone();
            String env = environment.getProperty("spring.profiles.active");
            String profile = "dev,local";
            if (StringUtils.isNotBlank(telPhone) && env != null && !profile.contains(env)) {
                telPhone = encodeDecodeService.encodeData(telPhone);
            }
            sysOperatorLog.setUserPhone(telPhone);
        }
        log.info("sysOperatorLog:{}", sysOperatorLog);

        try {
            sysOperatorLogService.saveSysLog(sysOperatorLog);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76

rocketmq关键词定义

Broker:消息中转角色,负责存储消息,转发消息。Broker是具体提供业务的服务器,单个Broker节点与所有的NameServer节点保持长连接及心跳,并会定时将Topic信息注册到NameServer,顺带一提底层的通信和连接都是基于Netty实现的。Broker负责消息存储,以Topic为纬度支持轻量级的队列,单机可以支撑上万队列规模,支持消息推拉模型。官网上有数据显示:具有上亿级消息堆积能力,同时可严格保证消息的有序性

Topic:主题!它是消息的第一级类型。比如一个电商系统可以分为:交易消息、物流消息等,一条消息必须有一个 Topic 。Topic与生产者和消费者的关系非常松散,一个 Topic 可以有0个、1个、多个生产者向其发送消息,一个生产者也可以同时向不同的 Topic 发送消息。一个 Topic 也可以被 0个、1个、多个消费者订阅。
Tag:标签!可以看作子主题,它是消息的第二级类型,用于为用户提供额外的灵活性。使用标签,同一业务模块不同目的的消息就可以用相同Topic而不同的Tag来标识。比如交易消息又可以分为:交易创建消息、交易完成消息等,一条消息可以没有Tag。标签有助于保持您的代码干净和连贯,并且还可以为RabbitMQ提供的查询系统提供帮助。
MessageQueue:一个Topic下可以设置多个消息队列,发送消息时执行该消息的Topic,RocketMQ会轮询该Topic下的所有队列将消息发出去。消息的物理管理单位。一个Topic下可以有多个Queue,Queue的引入使得消息的存储可以分布式集群化,具有了水平扩展能力。
NameServer:类似Kafka中的ZooKeeper,但NameServer集群之间是没有通信的,相对ZK来说更加轻量。它主要负责对于源数据的管理,包括了对于Topic和路由信息的管理。每个Broker在启动的时候会到NameServer注册,Producer在发送消息前会根据Topic去NameServer获取对应Broker的路由信息,Consumer也会定时获取 Topic 的路由信息。
Producer:生产者,支持三种方式发送消息:同步、异步和单向单向发送 :消息发出去后,可以继续发送下一条消息或执行业务代码,不等待服务器回应,且没有回调函数。异步发送 :消息发出去后,可以继续发送下一条消息或执行业务代码,不等待服务器回应,有回调函数。同步发送 :消息发出去后,等待服务器响应成功或失败,才能继续后面的操作。
Consumer:消费者,支持 PUSH 和 PULL 两种消费模式,支持集群消费和广播消费集群消费 :该模式下一个消费者集群共同消费一个主题的多个队列,一个队列只会被一个消费者消费,如果某个消费者挂掉,分组内其它消费者会接替挂掉的消费者继续消费。广播消费 :会发给消费者组中的每一个消费者进行消费。相当于RabbitMQ的发布订阅模式。
Group:分组,一个组可以订阅多个Topic。分为ProducerGroup,ConsumerGroup,代表某一类的生产者和消费者,一般来说同一个服务可以作为Group,同一个Group一般来说发送和消费的消息都是一样的 Offset:在RocketMQ中,所有消息队列都是持久化,长度无限的数据结构,所谓长度无限是指队列中的每个存储单元都是定长,访问其中的存储单元使用Offset来访问,Offset为Java Long类型,64位,理论上在 100年内不会溢出,所以认为是长度无限。也可以认为Message Queue是一个长度无限的数组,Offset就是下标。

本文使用 文章同步助手 同步

相关文章

  • 生命不息,写作不止

    最近学生们都在放暑假,于是,我也就扛起了给家里表弟表妹辅导的重任,虽然,在他们爸妈的眼中,我的强项是数学,但我认为...

  • 生命不息,写作不止

    2016-07-07 伍帆事情一多,我的脾气就渐长。先是不如意的事接踵而来,然后我未曾考虑过的意外事情一堆一堆的来...

  • 生命不息,写作不止

    释放心结最佳方式是写作。 写作时,那些往事,在笔下再现。喜怒哀乐,任我调节。功名利禄化云烟,不容青史尽成灰。 有人...

  • 生命不息,写作不止

    我是数学老师,为什么选择教数学呢?因为数学一直是我的优势科目。相比之下,语文就要相形见绌了,小学时语文一直不行,我...

  • 生命不息,写作不止

    今天写什么?今天写什么?今天写什么?想起一本书是这样说的:为了能使自己开始写作,大脑要放松,手可在纸上或在键盘上来...

  • 生命不息,写作不止

    你什么时候爱上写作的,你又是因为什么放弃了呢? 你愿意再次写作吗?

  • 生命不息,写作不止。

    今天一早收到了百师君的稿费300,估计某个故事号的500也快到了。 没错,800元是我上个月的稿费收入,有点儿寒碜...

  • 生命不息,写作不止

    文/孟路 刚刚结束了写作课的结营直播。 再一次感叹,能加入到有书写作营真的是很幸运。 加入写作营之前,我觉得写作真...

  • 生命不息,学习不止

    生命不息,学习不止 生命不息,学习不止 T6学员:海霞 本着学习的初心来...

  • 生命不息笔耕不辍

    30天后,我还是我,一成不变的我。只因时间太短,积累不足,新年伊始定下提升自我的目标,在短短一个月内,做与不做都无...

网友评论

      本文标题:猿创征文 第二季| #「笔耕不辍」--生命不息,写作不止#

      本文链接:https://www.haomeiwen.com/subject/qwtttdtx.html