- 博客(130)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 rabbitmq高可用集群部署
rabbitmq集群部署在了解了rabbitmq集群之后,来手动搭建一下rabbitmq的集群,这里以单机多节点为例,多机环境下基本上是一样的。了解rabbitmq集群可查看 rabbitmq集群简介集群安装环境:系统:ubuntu 18.04节点:3个节点,其中2个disc节点,1个ram节点搭建HAProxy使集群高可用单机环境多节点部署此时需要机器上已安装有rabb...
2019-04-20 21:19:27
1610
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 springcloud使用nacos进行服务注册与发现
自从有了spring-cloud-alibaba的开源之后,springcloud中使用nacos进行服务的注册与发现就已变得非常容易,只需要引入“spring-cloud-starter-alibaba-nacos-discovery”即可,然后开启@EnableDiscoveryClient,便可以做到无缝替换eureka和consul等注册中心。下面通过给出一个简单的案例来演示spring...
2019-03-22 22:41:44
11336
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Elasticsearch 重要配置详解
Elasticsearch基础配置elasticsearch的配置信息在elasticsearch.yml中,下面列出一些重要的配置:集群名称默认情况下es的集群名称是elasticsearch,在实际应用中应该设置一个有意义的集群名称:cluster.name: elasticsearch-cluster-demo节点信息es节点是es集群中的某一个节点,可由基本的三个信息描述,节...
2018-10-17 17:13:56
2212
原创 领域驱动应用架构实践
一个合适的应用架构不仅能促使项目朝着好的方向发展,易于维护,也能指导团队成员有效协作。DDD是站在领域的角度来驱动应用架构的落地,接下来将介绍一种落地方案。
2023-06-16 01:17:53
1215
原创 领域驱动设计理论实践
所以,就领域实体的建模而言,标识符是必须存在的,且不应该同数据库的标识ID混淆,因为数据库只是实体的持久化方式,对于实体的持久化,既可以选择关系型、文档型、索引型数据库,亦可以选择内存存储,数据存储介质的ID在对于领域实体而言被称为派生标识。对于连续性事件,订单的状态则是订单实体连续性事件的体现,经历多个状态的变迁,实体的标识并不会发生变化,变化的知识实体用有的内容和处于某个阶段的状态。聚合就是一组相关对象的集合,我们把聚合作为数据修改的单元,外部对象只能引用聚合中的一个成员,我们把它称为根。
2023-04-18 22:52:19
511
1
原创 通过SVG文件制图
1. SVG 介绍以下信息摘自 维基百科可缩放矢量图形(英语:Scalable Vector Graphics,缩写:SVG)是一种基于可扩展标记语言(XML),用于描述二维矢量图形的图形格式。SVG由W3C制定,是一个开放标准。SVG允许3种图形对象类型:矢量图形、栅格图像以及文本。图形对象(包括PNG、JPEG这些栅格图像)能够被编组、设计、转换及集成进先前的渲染对象中。文本可以在任何适用于应用程序的XML名字空间之内,从而提高SVG图形的搜索能力和无障碍性。SVG提供的功能集涵盖了嵌套转换、
2021-10-24 02:39:10
1612
原创 PlantUml-程序员的画图利器
PlantUml-程序员的画图利器1. PlantUml简介PlantUML是一个组可以用来在markdown文件中快速生成UML工程图的组件,比如:时序图用例图类图活动图(这是传统语法)组件图状态图对象图部署图计时图除此之外,还支持下面这些非UML图的展示:JSON数据线框图形界面Archimate图规范和描述语言(SDL)Ditaa图甘特图构思图工作分解结构图数学与AsciiMath或JLaTeXMath符号实体关系图2. 案例图下面给出几个常用的
2020-12-20 23:30:55
595
原创 JUC之ReentrantLock解读
ReentrantLock简介ReentrantLock是可重入锁的实现,可重入锁的含义是:如果已经拥有锁的线程再次获取锁时会立即响应成功,这点可以使用isHeldByCurrentThread和getHoldCount方法来检验。ReentrantLock可重入互斥锁具有同synchronized的隐式监视器锁相同的基本行为和语义,但是其更具有扩展能力。ReentrantLock提供公平锁和非公平锁的特性,如果设置为公平锁,那么锁倾向于访问等待时间最长的线程;如果是非公平锁,那便不会保证任何特定的访问
2020-07-09 14:39:03
376
原创 JUC之AQS解读
AQS简介AQS(AbstractQueuedSynchronizer)是一个模板类,其提供一个先进先出(FIFO)的等待队列,旨在为大多数依赖单个原子int值表示状态的同步器提供有用的基础。AQS类支持默认的排他锁和共享锁之一或两者。在排他锁模式下获取时,其他线程尝试获取是不会成功的,共享模式由多个线程获取可能会(但不一定)成功。AQS类不会“理解”这些区别,只是锁意义上说,当成功获取共享模式时,下一个等待线程(如果存在)也必须确定它是否也能够获取。在不同模式下等待的线程共享相同的FIFO队列。如果
2020-07-07 17:07:46
543
原创 如何实现一个好的单例模式?
单例模式在开发中会经常用到,那么如何实现一个优雅的单例就显的尤为重要.在实现的时候,我们需要根据具体情况考量如下信息:是否需要线程安全?是否需要懒加载?这里便来介绍4种常用的单例实现:饿汉,静态内部类,双重检查锁,枚举懒汉式懒汉是在开发中用的最多的情况,实现简且线程安全./** * @author lazycece */public class A { private static A a = new A(); private A() { } p
2020-06-07 17:50:16
365
原创 git常用命令总结
init config$ git config --global user.name lazycece$ git config --global user.email lazycece@gmail.com$ git config --global color.ui auto $ git config --global color.status auto $ git config --global color.branch auto $ git config --global colo
2020-06-07 17:10:51
226
原创 Mongo BsonUndefined 转换问题(自定义Mongo类型转换器)
BsonUndefined 转换问题关于这个问题的出现,是在业务中使用存储函数时,如果某个字段值为null,存入到数据库中会出现undefined,而随后查询会抛出ConverterNotFoundException异常信息,如下所示:org.springframework.core.convert.ConverterNotFoundException: No converter found ...
2020-04-16 22:33:38
2028
2
原创 如何将开源项目发布到Maven中央仓库
若要将开源项目包发布到maven中央仓库,官方指南指出需要具备如下必要条件:是releases版本有javadoc和sources经过GPG签名必要的POM信息开源包的坐标,即groupId和artifactId那么如何发布呢?这里采用最便捷通用的一种方式,使用Sonatype提供的OSSRH(Open Source Software Repository Hosting )来进行...
2020-02-23 21:56:52
592
原创 浅谈大文件上传方案
文件上传是一个很常见的功能,在业务场景中其又可分为单文件上传、分片上传、断点续传、秒传等。一个小文件上传在一个http连接便可以很快的完成,其无需担心上传失败重新上传的问题。而一个大文件的上传则不能这样,试想一个场景:10G的文件直接上传,如果上传一方的网速很好,服务器的网络带宽很小,那么服务器的带宽全被这个上传连接占用,其他人上传文件则已没有带宽可用;如果在网速较差的环境下上传,快要上传完成的...
2020-01-07 00:13:19
2172
原创 linux内核升级
这里以 ubuntu18.04 LTS 系统为例查看系统内核版本:uname -a查看已安装内核信息,确认需要安装的相应包:sudo dpkg --get-selections |grep linux官网下载查看最新稳定版本:https://www.kernel.org/官网选择版本下载, 这里以amd64的5.4.6_generic版本为例: linux-header...
2020-01-04 16:20:39
852
原创 ThreadLocal源码剖析
顾名思义,ThreadLocal是为线程提供私有的局部变量。它不同于其他常规的变量,需要使用自身的get和set方法来获取和设置值。ThreadLocal的典型应用是在类中被申明为静态变量,用于关联用户ID、事务ID,亦或者其他需要线程独有的属性。对于ThreadLocal,只要该线程处于活动状态并且ThreadLocal实例是可访问的,每个线程都保留对其本地线程副本的隐式引用。如果线程消失后,...
2019-11-05 21:40:00
730
3
原创 rocketmq实战之消息的有序发送与有序消费
rocketmq支持有序的发送消息,有序的消费消息,这里便来看一下如何实现?实战方面均以RocketMQTemplate形式展现,集成方案详见《springboot中rocketmq的集成与使用》消息的有序发送方面,我们可以直接使用syncSendOrderly(同步有序发送)和asyncSendOrderly(异步有序发送)两种类型的方法进行发送消息,他们的区别就如命名一样是同步和异步的...
2019-10-22 22:05:13
5074
原创 rocketmq实战之发送事务消息
rocketmq支持发送事务消息,即发送消息的事务性,这里便来看一下如何实现?实战方面均以RocketMQTemplate形式展现,集成方案详见《springboot中rocketmq的集成与使用》首先使用@RocketMQTransactionListener定义一个监听器来模拟执行本地事务和事务会查:@Slf4j@RocketMQTransactionListener(txPro...
2019-10-22 20:52:07
1556
原创 rocketmq源码剖析之消费者消费偏移持久化
行为的触发时机消费者消费偏移位置的持久化是消费客户端的行为,是在client启动的时候设定的一个定时任务,如下所示: this.scheduledExecutorService.scheduleAtFixedRate(new Runnable() { @Override public void run() { ...
2019-10-21 23:17:47
829
原创 rocketmq源码剖析之客户端topic路由刷新
rocketmq的client在启动的时候,会通过开启一个定时任务来定期刷新topic信息,这里就来看一下这个刷新的过程。首先来看一下这个定时任务: this.scheduledExecutorService.scheduleAtFixedRate(new Runnable() { @Override public void ru...
2019-10-20 21:59:07
482
原创 rocketmq源码剖析之producer和consumer的启动关闭
producer在rocketmq的作用是消息的生产者,consumer在rocketmq的作用是消息的消费者,它的生命周期是跟项目相关的,即是由使用者控制的。而为什么要将这两个角色的启动关闭流程放在一起剖析呢?是因为他们都是MQ的客户端,在启动和关闭的行为上,有着很多共同的地方。接下来便将会来仔细探究其启动和关闭的过程。ProducerDefaultMQProducerDefaultMQP...
2019-10-19 23:05:55
2510
原创 linux下安装rocketmq
这里以在ubuntu18.04上安装为例,来说明安装单个实例rocketmq的过程和验证情况。安装下载下载地址如下,选择想要下载的版本即可:http://rocketmq.apache.org/release_notes/解压在自己的环境安装目录下解压$ unzip rocketmq-all-4.5.2-bin-release.zip启动服务启动namesrvnamesrv...
2019-10-13 18:55:35
296
原创 linux下安装maven
下载官网下载,地址如下:https://maven.apache.org/download.cgi解压在自己的环境安装目录下解压:tar -zxvf apache-maven-3.6.2-bin.tar.gz配置更改更改maven配置为可选项$ cd apache-maven-3.6.2/$ vim conf/settings.xml自定义本地仓库位置:<loc...
2019-10-13 17:38:55
158
原创 rocketmq源码剖析之producer配置
在rocketmq中,MQProducer是承载消息发送的,消息的发送又可以分为常规消息的发送和事务消息的发送,其中常规消息发送用的是DefaultMQProducer,事务消息的发送用的是TransactionMQProducer。他们集成关系图如:DefaultMQProducer在DefaultMQProducer 中有一些常规的producer端的配置,如下所示:produce...
2019-09-01 12:25:50
1000
原创 rocketmq发送消息的三种方式
从功能上来说,rocketmq支持三种发送消息的方式,分别是同步发送(sync),异步发送(async)和直接发送(oneway)。下面来简单说明一下这三种发送消息的方式,以便了解它们之间的差异。以下的案例代码将会使用spring-message风格进行展示,即使用rocketMQTemplate方式,详见rocketmq-spring同步发送 sync发送消息采用同步模式,这种方式只...
2019-09-01 12:20:28
24615
3
原创 elasticsearch中terms聚合结果json序列化处理
场景将terms聚合的结果直接返给前端处理,如果bucket的key为字符串时,在mvc层jackson进行json序列化处理会报类型转换错误。原因分析terms聚合的结果中有keyAsNumber字段,是将桶key转为number类型,但是当key为字符串类型的数据时,是无法转为numebr类型的。jackson在序列化的时候,当terms聚合的key为字符串类型时,则会调用Parse...
2019-08-03 10:45:19
6415
5
原创 elasticsearch中bucket_script聚合父级必须是多桶聚合
场景业务需求中,在计算人均通话数时,使用聚合的时候使用到了内联以及反内联聚合,当bucket_script聚合作为反内联reverse_nested的子聚和的时候,会报如下错误:org.elasticsearch.ElasticsearchException: Elasticsearch exception [type=class_cast_exception, reason=org.elas...
2019-08-03 10:42:31
6181
原创 elasticsearch中max_result_window有上限限制
场景做分页查询,当分页达到一定量的时候,报如下错误:Result window is too large, from + size must be less than or equal to: [10000] but was [78020]. See the scroll api for a more efficient way to request large data sets. This...
2019-08-03 10:40:00
19556
原创 词向量余弦算法计算文本相似度
计算文本相似度有多种方式,这里简单介绍一下其中的一种:词向量余弦。词向量余弦词向量余弦算法,是将文本作为一个多维空间的向量,计算两个文本的相识度即计算判断两个向量在这个多维空间中的方向是否是一样的。而这个多维空间的构成是通过将文本进行分词,每个分词代表空间的一个维度。下面通过例子来说明多维空间的构成即词向量问题。比如要计算如下两个短文本的相识度:文本一:天气预报说,明天会下雨,你明天早上...
2019-07-28 16:39:58
9109
原创 ubuntu下安装Golang环境
apt源下载sudo apt install golang-gogo versionsnap源下载sudo snap install gogo version官方安装包下载官网下载地址:https://golang.google.cn/dl/如下图所示,选择需要下载的版本(这里以1.12.5版本为例):解压安装包tar -zxvf go1.12.5.linux-amd...
2019-07-16 20:27:40
881
原创 springboot中rocketmq的集成与使用
消息队列rocketmq是Apache旗下的开源项目(原是Alibaba开源的项目),当springboot盛行后,Apache团队开源了rocketmq-spring来帮助我们在springboot中快速集成rocketmq,只需引入rocketmq-spring-boot-starter即可。rocketmq-spring不仅实现了自动配置功能,个人认为最主要还是封装了spring-mes...
2019-06-16 22:57:16
6706
1
原创 springboot中执行定时任务
定时任务的是很常见的开发工作,在springboot中我们可以用注解很easy的实现。首先,需要加入@EnableScheduling注解开启定时任务功能,如下所示:@SpringBootApplication@EnableSchedulingpublic class SpringbootAcTaskApplication { public static void main(String...
2019-06-16 22:55:49
148
原创 springboot中任务异步执行
并行与并发场景下,异步执行是不可少的。这里来看一下在springboot中如何使用注解的方式执行异步任务?首先创建一个springboot项目,在主函数类上加入@EnableAsync注解开启异步功能,如下所示:@SpringBootApplication@EnableAsyncpublic class SpringbootAcTaskApplication { public sta...
2019-06-16 22:53:06
531
原创 Cron表达式讲解
格式[秒] [分] [时] [日] [月] [周] [年]语法参数可选值可选通配符必填秒0-59, - * /是分0-59, - * /是时0-23, - * /是日1-31, - * ? / L W是月1-12 OR JAN-DEC, - * /是周1-7 OR SUN-SAT, - * ? / L ...
2019-06-16 22:51:08
912
原创 springboot中redis的集成与使用
springboot中提供了对redis的lettuce和jedis两个客户端的自动配置功能的支持,而在使用spring-boot-starter-data-redis帮助我们快速集成redis时,其是默认支持lettuce的。下面来看一下使用spring-boot-starter-data-redis如何快速集成与使用redis。依赖引入在pom文件中加入starter和common-po...
2019-06-16 22:47:45
213
原创 springboot中使用RestTemplate调用rest服务
日常开发中,调用远程的rest服务是很常见的,比如微服务情况下的rest服务调用,又或者是调用第三方服务。微服务下的调用有服务注册与发现机制来调用,也可以使用RestTemplate方式来调用;而要是第三方服务,那么一般情况下是通过HTTP请求来调用。接下来就看说一下在springboot项目中,用RestTemplate来调用远程rest服务,包括第三方服务。首先我们的web项目中一般会有...
2019-05-22 23:17:28
2011
原创 springboot中实现发送邮件功能
发送邮件的功能有时在业务中还是需要使用到的,比如订单方面的业务,用户下单后需要给用户发送一个订单相关的邮件;又或者是某些系统在业务层来集成预警功能,出现问题时及时给开发和运维发送预警邮件。那么,接下来将讲一下在springboot项目中邮件发送功能的集成与其简单的使用。依赖引入首先,在POM文件中加入如下依赖: <dependency> <groupId>o...
2019-05-22 00:05:29
837
原创 springboot中mongodb多数据源集成
说完springboot中如何使用mongodb,接下来就来看一下mongod的多数据源集成。因为多数据源在开发中还是很常见的,比如在中小型项目中,我们可以将日志存储在mongo中(单独一个日志库)。这里只说明一下多数据源的集成方式,springboot中mongo的使用可详见springboot中mongodb集成与使用mogno多数据源配置首先我们定义两个数据源配置,如下所示:m...
2019-05-19 11:31:05
1492
原创 springboot中mongodb集成与使用
mognodb是由C++语言编写的,是一个基于分布式文件存储的开源nosql数据库系统,旨在为WEB应用提供可扩展的高性能数据存储解决方案。在高负载的情况下,添加更多的节点,可以保证服务器性能。由于其的高性能,以及文档型的存储结构,在开发的使用已经非常普及了。那么接下来就来看一下如何在springboot中集成使用mongodb。依赖引入springboot一个强大的特性就是自动配置功能,...
2019-05-19 10:46:41
884
原创 springboot中mybatis多数据源动态切换实现
在开发中,动态数据源配置还是用的比较多的,比如在多数据源使用方面,又或者是在多个DB之间切换方面。这里给出一个动态数据源的配置方案,两个DB均以mysql为例。多数据源配置引入mybatis和mysql在springboot中的引入这里就不在说了,不了解的可以参见springboot中mysql与mybatis的引入。数据源配置如下:datasource: master: t...
2019-05-04 15:16:52
4655
27
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人