xyz327

hakuna matata

npm install时卡在node install.js

https://github.com/cnpm/cnpmjs.org/issues/1530#issuecomment-561081645

Benchmark(基准测试)

对于程序性能的一种测试方法

Java官方对于benchmark有一个工具JMH

使用Junit-Benchmark给Junit4添加benchmark

在spring-boot中编写对比List的add方法性能的测试用例如下

阅读全文 »

Git Commit 规范说明

规范化的commit信息可以方便每次release发版时自动生成对应的changelog

自动生成CHANGELOG信息

可以使用standard-version
基于nodejs的规范化工具

在每次发版之前在项目跟目录下执行,就会自动生成changelog信息

1
npx standard-version
阅读全文 »

gitflow 只是一套规范在使用时也无非是使用git的命令来完成gitflow定义的分支事情,但是使用原始的git命令行太麻烦也容易出错,于是就有了gitflow的工具

gitflow命令行工具

为git命令行添加gitflow的动作命令.简化使用的难度

安装

详细信息参考官方文档

  1. Liunx (Debian)
    1
    2
    # Ubuntu 18.04
    apt-get install git-flow
  2. windows
阅读全文 »

gitflow规定一个项目有
两个长期存在的分支 master, develop
三种临时分支 feature ,hotfix, release
ps:还可能会有 bugfix分支 bugfix 属于一种特殊的 feature 分支

Git Flow常用的分支

Production 分支

也就是我们经常使用的Master分支,这个分支最近发布到生产环境的代码,最近发布的Release, 这个分支只能从其他分支合并,不能在这个分支直接修改,每次提交都需要打上对应的tag

Develop 分支

这个分支是我们是我们的主开发分支,包含所有要发布到下一个Release的代码,这个主要合并与其他分支,比如Feature分支

阅读全文 »

spring-messaging的源码在spring-framework项目中,属于spring-framework项目中的一个组件

看项目依赖图纸依赖了spring的核心包

Spring Messaging 是 Spring Framework 中的一个模块,其作用就是统一消息的编程模型。

  • 消息Messaging 对应的模型就包括一个消息体 Payload 和消息头 Header:
    1
    2
    3
    4
    5
    package org.springframework.messaging;
    public interface Message<T> {
    T getPayload();
    MessageHeaders getHeaders();
    }
  • 消息通道 MessageChannel 用于接收消息,调用 send 方法可以将消息发送至该消息通道中 :
    1
    2
    3
    4
    5
    6
    7
    8
    @FunctionalInterface
    public interface MessageChannel {
    long INDEFINITE_TIMEOUT = -1;
    default boolean send(Message<?> message) {
    return send(message, INDEFINITE_TIMEOUT);
    }
    boolean send(Message<?> message, long timeout);
    }

sentinel是通过slot来实现限流降级等功能,所以slot是sentinel的核心

sentinel使用com.alibaba.csp.sentinel.slotchain.SlotChainBuilder去构建slot的调用链
默认是使用com.alibaba.csp.sentinel.slots.DefaultSlotChainBuilder
com.alibaba.csp.sentinel.slotchain.SlotChainProvider中使用serviceLoader去加载slotChianBulder的实现.有自定义实现就使用自定义实现,没有就使用默认的DefaultSlotChainBuilder

阅读全文 »

Sentinel相关概念

资源与规则

资源

资源是 Sentinel 的关键概念。它可以是 Java 应用程序中的任何内容,例如,由应用程序提供的服务,或由应用程序调用的其它应用提供的服务,甚至可以是一段代码。在接下来的文档中,我们都会用资源来描述代码块。

只要通过 Sentinel API 定义的代码,就是资源,能够被 Sentinel 保护起来。大部分情况下,可以使用方法签名,URL,甚至服务名称作为资源名来标示资源。

规则

围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则以及系统保护规则。所有规则可以动态实时调整。

阅读全文 »

Sentinel

Sentinel入门

Sentinel 是面向分布式服务架构的轻量级流量控制框架,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助您保护服务的稳定性。

主要特性

主要特性

开始使用

阅读全文 »

springmvc 在容器初始化后使用监听ContextRefreshedEvent事件来初始化DispatcherServlet中的各种属性
MultipartResolver就是其中一个
初始化MultipartResolver是从IOC容器里面获取一个名为multipartResolverMultipartResolver的Bean

MultipartResolver是用于处理HTTP上传文件的请求处理器
springmvc在处理文件上传时,使用MultipartResolverHttpServletRequest解析包装成MultipartHttpServletRequest对象
MultipartHttpServletRequest提供了获取MultipartFile的方法

MultipartHttpServletRequest接口继承了HttpServletRequest
MultipartFile提供了获取上传的文件相关属性以及文件流的方法
在Controller中使用MultipartHttpServletRequest更方便的处理上传文件

MultipartResolver

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public interface MultipartResolver {
/**
* 判断给定的请求是否包含 multipart 内容
* 通常是检查request的Content-Type是否是 "multipart/form-data"
* 实际还是依赖解析器自己的实现
*/
boolean isMultipart(HttpServletRequest request);

/**
* 解析HTTP request 包含的文件和参数并把它们包装到
* {@link org.springframework.web.multipart.MultipartHttpServletRequest}对象中
* 这个接口实现了{@link javax.servlet.http.HttpServletRequest}
*/
MultipartHttpServletRequest resolveMultipart(HttpServletRequest request) throws MultipartException;

/**
* 清理资源,例如存储的上传文件
*/
void cleanupMultipart(MultipartHttpServletRequest request);
}

springmvc为MultipartResolver提供了两种实现

阅读全文 »