落雁沙
吹牛逼大王
  • 利用async_hooks实现请求生命周期的数据共享

    在项目中我们经常会会日志打印出来,但是,由于请求一般的异步或者多线程的。N个请求生命周期中的日志会杂乱的显示在一起,我们很难判断出某个日志是同一请求的。这个时候,我们需求用到traceIdl来标记。在java中,我们会利用slf4j的MDC记录traceId。那么,在nodejs中,我们要怎么做呢? 我们都知道,nodejs在v10.5.0之后才增加了对多线程的支持。正常情况下,我们还是用单线程去执行的,然后,内部执行是异步的。那么,既然是异步的,我们就不可能通过类似Java的ThreadLocal的方案去做。那么,我们只能通过参数传递发方式去把ctx传递到需要的地方。 在node8.2中新增了async_hooks模块,虽然好像该api一直是试验阶段,但是,目前看来,还是可行的。 官方介绍async_hooks是这么用的 const asyncHook = require('async_...
    • 1
    • 28
    • 0
    • 2019-11-27
  • Elasticsearch的预处理

    1.背景 elasticsearch 5.0 版本开始引入了预处理节点[Ingest Node]。 2. 什么是预处理 在实际索引发生之前,可以使用Ingest Node对文档进行预处理。此预处理由接收节点进行,该节点拦截批量和索引请求,应用转换,然后将文档传递回索引或批量api。 简单的理解,就是类似我们使用的拦截器。在数据实际落库之前,对数据进行处理。 3. 预处理的使用场景 我们都知道,很多时候,我们用elk进行日志收集。但是,我们的日志很多时候就是一个包含了很多数据的字符串,那么,我们在把日志收集到elasticsearch的时候,我们希望对数据进行解析,把一些信息提取出来,这样,我们可以,更方便的检索日志。 4.预处理的用法 4.1 开启节点的预处理功能,默认是开启的。 如果需要关闭,在elasticsearh.yaml中 node.ingest: false 4.2 我们需要...
    • 0
    • 16
    • 0
    • 2019-11-26
  • elk环境配置

    随着微服务的发展,目前的应用很多都是分布式的,服务会落在不同的节点上。这个时候,日志的查看就是一个问题了。之前单应用的时候,我们只要去服务器上看下日志文件就行。分布式的应用,首先要确定是哪个服务出的问题,该服务在哪个节点上。 那么,解决这个问题的方向,当然就是日志的收集。目前行业主要有elk,splunk等方案。 我们今天说下elk,elk指的是elasticsearch,logstash,kibana. elasticsearch : 搜索引擎 filebeat:日志收集 logstash:日志解析过滤 kibana:展示面板 考虑到logstash的性能消耗比较大,而且,elasticsearch对json的支持,决定不使用logstash ,直接打出json格式的日志,然后,通过filebeat直接发送到elasticsearch。这里我们用docker来部署elasticsearc...
    • 1
    • 27
    • 0
    • 2019-11-22
  • 微信公众号授权流程整理

    我们在微信公众号下获取微信授权以及绑定账户的时候,有很多流程要做。需要判断好多次各种条件,所以整理了一下流程图。 再次吐槽下腾讯的文档以及规范,果然业界出名的差。
    • 0
    • 32
    • 4
    • 2019-10-27
  • next.js ssr与单页面应用同项目的注意点

    我们使用next.js的主要目的是为了做服务端渲染,但是,在管理后台上,就没有这样的需求,单页面应用自然更加方便。 那么,如果我们在展示前台使用ssr,管理后台使用单页面应用。 需要注意一下,next.js 9.0.6使用的 "@zeit/next-css": "^1.0.1", 而@zeit/next-css中引用的css-loader 的版本是1.0.0。这个版本是比较老了,所以在使用的时候,要注意不要再依赖css-loader了,或者指定css-loader的版本1.0.0。 否则会报错哦
    • 0
    • 23
    • 0
    • 2019-10-16
  • 关于maven工程结构的一点建议

    有人喜欢谈论各种底层或者炫技的东西,我个人更倾向于先做好工程结构和代码规范。绝大部分情况下,我们是达不到语言或者系统的性能瓶颈的(大厂的系统除外),多数情况下,系统慢的原因就是一个,代码写的烂! 阿里巴巴推出的《阿里巴巴java开发手册》,很具有指导意义,大部分情况下,按照规范就可以很大程度上提高代码的可读性和规范性。但是,当遇到复杂业务的项目的时候,还是稍显不足,需要再细化一下。 在Java的项目中,无论是基于maven 还是gradle做的依赖管理,工程结构都是相似的。结合《阿里巴巴java开发手册》基本还是分为controller,service,manager,dao 相对于以前的三层结构,多了一个manager层,文档上说的是作为业务下沉,以及第三方调用。这么一来,manager层就变成了整个项目中最重的一层。我们主要也是对manager的细化。 1.出于对项目发展的不确定性,我...
    • 1
    • 82
    • 0
    • 2019-10-09
  • 解决babel-node运行sequelize的报错问题

    在使用babel-node运行sequelize项目,执行create的时候,会报如下错误 TypeError: Class constructor Model cannot be invoked without 'new' 这个问题,找了很久没找到解决方案,暂时的处理方法,就是把es6写法改成define的方式。 比如 class TestUser extends Sequelize.Model{ } TestUser.init({ id: { type: Sequelize.INTEGER, allowNull: false, primaryKey: true, autoIncrement: true }, title: { type: Sequelize.STRING } ...
    • 0
    • 23
    • 0
    • 2019-09-28
  • java bean 转换工具orika

    在java项目中,由于业务场景需要,我们经常会需要做bean的转换。 最基本的写法是get/set去对每个属性赋值,但是,更多的时候,bean里面的属性比较多,如果每次都这么手动写,工作量毕竟大,而且也不易维护。 apache,和spring都有BeanUtils,但是是基于反射的,性能较差。当然也有性能高的,比如BeanCopier,但是只能用于属性名一样的两个bean。有没有性能比较好,适用性也比较好的呢? orika可以满足。 1.jar包 <dependency> <groupId>ma.glasnost.orika</groupId> <artifactId>orika-core</artifactId> <version>1.5.4</version> </dependency> 2.创建映射工厂 MapperFactory mapperFactory...
    • 0
    • 40
    • 0
    • 2019-09-28
  • redisson实现分布式锁

    随着微服务的推广,现在越来越多的有一定体量的项目,都开始微服务化。 微服务的优点,不必赘述。但是,凡是都是有两面的,比如,分布式的并发安全性。在单应用中,我们可以通过加锁的方式去实现。那么在分布式项目中,我们同样是遵循加锁的思路。 redisson作为一个redis客户端,自身就有分布式锁的功能。 1.在spring boot项目中配置redisson 1.1添加依赖 <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter</artifactId> <version>3.11.4</version> </dependency> <dependency> <groupId>org.redisson</groupId> <artifactI...
    • 0
    • 68
    • 2
    • 2019-09-25
  • feign client中对不同类型返回值decode的处理

    在spring cloud的微服务项目中,我们在微服务之间的调用经常是通过feign client去操作的。 由于是局域http的rest风格接口,很多人会去做一层包装,类似这种: { "code":"ok", "message":null, "data":"hello" } 如果是这种对象形式的返回值,一般是没有问题的。但是,由于是微服务,有的时候,我们会更倾向于贴近RPC的写法,返回什么,就是什么,不做包装。这样一来,我们就可以返回String,Integer,Long,Object等各种类型的返回值。 之前我是用的JacksonDecode作为decode的实现方式,在一次使用String 作为返回类型的时候,发现会报错。原因就是jackson不能直接继续一个非json的字符串。于是,便考虑其他途径。 我们先看Decode的接口 public interface Decoder {...
    • 0
    • 19
    • 0
    • 2019-09-22
文章分组
暂无数据