【架构设计】
文章平均质量分 77
好好生活_
这个作者很懒,什么都没留下…
展开
-
Java操作Elasticsearch6实现单个字段多值匹配
引言单个字段多值匹配的意思类似mysql中某个字段的in查询,最近需求变更,需要在elasticsearch中实现多值匹配,下面总结一下几种实现的方法。基础代码下面是指定查询索引名称和索引类型基础代码:SearchRequest searchRequest = new SearchRequest();searchRequest.indices(indexName);searchRequest.types(indexType);SearchSourceBuilder builder = new原创 2020-12-11 08:50:02 · 10810 阅读 · 0 评论 -
【Elasticsearch】利用kibana调整索引mapping结构
引言在初次创建索引后,索引结构一般都固定不变,但也难免会遇到需求更改而索引结构也需要有对应的调整。本篇博客将介绍如何利用kibana新增字段,并且初始化值。查看索引mapping结构首先,我们可以先通过kibana使用以下API查看某一索引的结构:GET /'index_name'/'index_type'/_mapping 如果对kibana使用API有疑问,可以查看博客kibana安装与使用教程注:API中的index_name和index_type为常量,对应索引名和索引类型。修改索引原创 2020-12-08 12:00:31 · 9961 阅读 · 0 评论 -
Java操作Elasticsearch6实现group by分组查询
引言通过上篇博客的总结,我们知道了在Elasticsearch6中count、distinct和count(distinct)方法的使用。本篇博客继续聚合查询的学习,也就是对应mysql中的group by的使用。公共实体对于下面要介绍的查询,返回结果为统一实体,代码如下:/** * 单个字段分组返回结果 * * @author : huzhiting * @date : 2020-11-18 15:02 */@Datapublic class AggregationForOneDTO原创 2020-11-18 16:26:24 · 7829 阅读 · 3 评论 -
Java操作Elasticsearch6实现count统计、distinct去重
引言很久没有更新Elasticsearch系列文章,一方面是之前学会的条件查询足以满足项目需求,另一方面是前段时间一直很忙,几个项目的需求交叉进行,没什么时间学习新的东西。本篇博客将更新count、distinct、count(distinct)这几个新学到的Elasticsearch关于查询的方法。1. Count计算在项目中,count也算是一个比较常用的方法。之前项目中有需要用到,都是基于查询所有的方法,直接取total的值返回。最近发现,其实Elasticsearch单独封装了一个Count原创 2020-11-18 11:58:28 · 15786 阅读 · 3 评论 -
Java操作Elasticsearch6实现基本查询
引言业务系统接入Elasticsearch搜索服务后,开始了写查询接口的任务,本篇博客将总结Java操作Elasticsearch一些基本查询的实现。基础代码构建查询条件,对应Elasticsearch其实就是构建SearchRequest对象,指定索引库Name,指定索引库Type,创建SearchSourceBuilder对象,根据需求创建QueryBuilder对象,下面是创建和使用构建对象的基础代码:SearchRequest searchRequest = new SearchReques原创 2020-09-23 11:40:40 · 3583 阅读 · 3 评论 -
【Elasticsearch6.8】局部更新索引数据报错:The number of object passed must be even but was [1]
引言 上周把ES搜索服务搭建好了,这两天在业务系统上对接该服务,遇到了The number of object passed must be even but was [1]这样一个问题,下面记录一下解决的过程。 背景 依据系统需求,我们会将现有系统中所有的用户数据全量同步一次到ES,后面用户在系统中进行信息的更新会增量同步至ES,增量同步代码是用的单个新增/修改文档的方法,具体代码可参见《Rest Client方式集成Spring Boot应用》。 局部更新引入 因为增量更新时,只更新个别字段.原创 2020-09-16 12:18:23 · 1853 阅读 · 0 评论 -
【Elasticsearch6.8】基于SpringBoot构建ES搜索服务
引言通过之前的资料调研,在上篇文章中我们已经整合好Springboot+Elasticsearch6.5的demo。为了满足系统需求,我们会将所有数据入口接入Elasticsearch,然后通过ES去查询数据。所以,我们决定单独出一个搜索服务,接入ES,封装一些操作索引的基本方法,其他服务需要使用,直接引用该服务即可。环境• SpringBoot:2.1.9.RELEASE• Elasticsearch:6.8.6工程结构 核心代码有了上面的工程结构之后,就可以开始写代码了。下面展示一些核.原创 2020-09-12 13:06:00 · 1676 阅读 · 2 评论 -
【Elasticsearch6.5】Rest Client方式集成SpringBoot应用
引言 在上一篇博客中,我们对Elasticsearch操作索引API有了简单应用,并且在Head插件下看到了存储在ES中的索引数据结构。本篇文章将实践如何在SpringBoot应用中去集成Elasticsearch,并且通过代码去完成索引的一系列操作。集成方式 Spring Boot应用集成Elasticsearch有多种方式可以选择,比如可以直接引用SpringBoot官方提供的starter,然后通过hibernate JPA规范,dao层继承ElasticsearchRepository,就相当原创 2020-09-08 20:30:20 · 845 阅读 · 0 评论 -
【Elasticsearch6.5】使用API新建、更新、删除、查询索引数据
引言 通过上篇博客,我们已经在Linux环境下安装好了单机版的Elasticsearch和Head插件。本篇博客主要是照着官网操作一些API,熟悉一下如何建立、查询索引等操作,熟悉一下Head管理页面,这样在后面集成代码的过程中也会有所共鸣。 Index API 通过Index API,我们可以创建或者更新一个具体的索引,数据是JSON格式的文档,通过下面的命令,可以创建一个名为book,类型为_doc,id为377c-11ea-bbca-ec0d9a30b0c2的索引:指定idcurl -.原创 2020-09-06 13:55:35 · 686 阅读 · 0 评论 -
【Elasticsearch6.5】实例与Head插件安装教程
引言 在上篇博客中,我们对Elasticsearch有了一个入门的了解,为了方便后面的深入学习与实践,本篇博客将分享Elasticsearch的安装流程。环境与版本 • 操作系统:CentOS-7-x86_64 • Java环境:JDK8 • Elasticsearch版本:6.5.4单实例安装 1. 下载安装包wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.tar.gz 2.原创 2020-09-05 22:27:40 · 456 阅读 · 0 评论 -
全文搜索引擎Elasticsearch入门了解
一. 简要介绍Elasticsearch是实时的分布式搜索分析引擎,底层基于Lucene。Lucene是Java语言编写的全文搜索框架,用于处理纯文本的数据,但它只是一个库,提供建立索引、执行搜索等接口,但不包含分布式服务,这些正是 ES 做的。二. 使用场景基于ES,我们可以很容易地搭建自己的搜索引擎,用于分析日志,或者配合开源爬虫建立某个垂直领域的搜索引擎。除了搜索,ES 还提供了大量的聚合功能,所以它不单单是一个搜索引擎,还可以进行数据分析、统计,生成指标数据。三. 基本概念1. Node和原创 2020-09-05 20:23:47 · 444 阅读 · 0 评论 -
【Spring Cloud】Nacos作为配置中心,如何配置?
引言继续Nacos的学习,在上篇博客中,我们知道了Nacos安装、下载及作为注册中心的使用,本篇博客介绍的内容是Nacos作为配置中心,我们如何读取、修改配置等。配置流程1. 引入依赖<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> &原创 2020-08-28 11:11:53 · 1019 阅读 · 0 评论 -
【Spring Cloud】Nacos介绍、下载、服务注册和发现的使用
最近了解到一个新东西,Nacos,是阿里巴巴的新开源项目,其核心定位是 “一个更易于帮助构建云原生应用的动态服务发现、配置和服务管理平台”。什么是Nacos?Nacos 的关键特性包括:服务发现和服务健康监测Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDK、OpenAPI、或一个独立的Agent TODO注册 Service 后,服务消费者可以使用DNS TODO 或HTTP&API查找和发现服务。Nacos 提供对服务的实时的健康检查,阻止向不健.原创 2020-08-22 16:29:28 · 355 阅读 · 0 评论 -
【Mybatis-Plus】条件参数查询手册
【引言】使用mybatis-plus框架的基础上,直接使用其中的条件参数进行查询还是很方便的。但每次使用到像大于、不等于这样一些不常用的条件时,都需要现查,所以记录在这篇博客里,当作一个自己的查询手册。【手册】查询方式说明select设置查询字段andAND 语句,拼接 + AND (字段=值)orOR 语句,拼接 + OR (字段=值)eq等于=allEq基于 map 内容等于=ne不等于<>gt大于>ge原创 2020-05-25 16:51:26 · 8174 阅读 · 1 评论 -
分布式ID生成方案(七):美团Leaf
简介Leaf由美团开发,github地址:https://github.com/Meituan-Dianping/LeafLeaf同时支持号段模式和snowflake算法模式,可以切换使用。集成步骤美团提供了一个基于spring boot的HTTP服务来获取ID,我们部署好Leaf Server就可以在项目中使用美团Leaf来生成唯一ID。将项目源码导入本地环境:git clone ht...原创 2020-04-24 13:54:12 · 1751 阅读 · 0 评论 -
分布式ID生成方案(六):SpringBoot2.X集成百度UidGenerator
简介uid-generator是由百度技术部开发,项目GitHub地址 https://github.com/baidu/uid-generatorUidGenerator是Java实现的, 基于Snowflake算法的唯一ID生成器。Snowflake算法Snowflake算法描述:指定机器 & 同一时刻 & 某一并发序列,是唯一的。据此可生成一个64 bits的唯一I...原创 2020-04-23 17:20:46 · 3589 阅读 · 1 评论 -
分布式ID生成方案(五):SpringBoot2.X集成滴滴Tinyid
简介Tinyid是用Java开发的一款分布式id生成系统,基于数据库号段算法实现,简单来说是数据库中保存了可用的id号段,tinyid会将可用号段加载到内存中,之后生成id会直接内存中产生。特性全局唯一的long型id趋势递增的id,即不保证下一个id一定比上一个大非连续性提供http和java client方式接入支持批量获取id,支持生成1,3,5,7,9…序列的id支持多个...原创 2020-04-23 12:59:50 · 2066 阅读 · 2 评论 -
分布式ID生成方案(四):基于Redis的实现
【引言】Redis的所有命令操作都是单线程的,本身提供像 incr 和 increby 这样的自增原子命令,所以能保证生成的 ID 肯定是唯一有序的,本篇博客将继续分享如何使用Redis实现全局性ID。在上篇文章中,我们已经搭建好Spring Boot集成Redis的项目,接下来我们就基于该项目实现Redis生成全局性ID的方案。【代码实现】代码实现上只需要两个核心方法,一个方法是从red...原创 2020-04-22 11:33:12 · 1630 阅读 · 0 评论 -
分布式ID生成方案(三):MySQL下不同模式的实现
数据库自增ID基于MySQL,最简单的方法是使用auto_increment 来生成全局唯一递增ID,但最致命的问题是在高并发情况下,数据库压力大,DB单点存在宕机风险。数据库多主模式针对上面方式的缺点,我们可以使用数据库主从模式来做高可用方面的优化,比如双主模式,两个MySQL设置不同的初始值及步长:MySQL1:set @@auto_increment_offset = 1; ...原创 2020-04-21 17:26:56 · 546 阅读 · 0 评论 -
分布式ID生成方案(二):SnowFlake雪花算法
雪花算法(Snowflake) 是twitter公司内部分布式项目采用的ID生成算法,开源后广受国内大厂的好评,在该算法影响下各大公司相继开发出各具特色的分布式生成器。SnowFlake算法生成id的结果是一个64bit大小的整数,它的结构如下图:Snowflake生成的是Long类型的ID,一个Long类型占8个字节,每个字节占8比特,也就是说一个Long类型占64个比特。Snowfla...原创 2020-04-21 13:31:39 · 897 阅读 · 0 评论 -
分布式ID生成方案(一):总体概述
为什么需要分布式ID在复杂的业务系统中,往往需要对大量的数据和消息进行唯一标识。如电商系统中常见的订单号。系统使用前期,可能数据量小,应用和数据库方面压力不大,这样单体架构的基础上,我们可以直接使用数据库自增ID及对应的单号生成规则即可满足。但随着用户量的增加,数据量也随之增大,我们会随之调整为分布式系统架构,集群部署应用、数据库分库分表等改造,原来简单的数据库自增ID已经不能满足生成ID的...原创 2020-04-21 12:06:50 · 542 阅读 · 0 评论 -
【Spring Boot】IDEA + Maven + Spring Boot + MybatisPlus + EasyExcel
【引言】之前项目中做导入导出功能,都是集成Apache开源框架 poi,也许我们还遇到过线上数据量过大,导致OOM。 所以,本篇博客使用的是阿里的框架EasyExcel。【概述】Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如0...原创 2020-03-24 18:52:03 · 1453 阅读 · 1 评论 -
【Spring Boot】IDEA + Maven + Spring Boot + ElasticJob
【引言】之前接触过用XXL-JOB来做分布式定时任务,本篇文章将介绍一个新的分布式定时任务解决方案——Elastic-Job。【整体概述】Elastic-Job是由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成。Elastic-Job-Lite使用jar包的形式提供分布式任务的协调服务,外部依赖仅Zookeeper。整体架构图如下:【核心...原创 2020-03-23 17:31:43 · 457 阅读 · 0 评论 -
【Spring Boot】Mybatis Plus 3.X 条件查询
【引言】前面写过一篇博客《【Spring Boot】Mybatis Plus 2.X 条件查询》,我们知道Mybatis Plus 2.X 和 3.X 实现查询的方式不太一样,本篇博客将总结一下3.X版本各种查询方法的应用。【实例】下面以文章表的查询为例,展示几种不同的查询方法的使用:1. 按文章栏目编号查询对应栏目下所有文章public List<Article> sear...原创 2020-03-17 16:26:03 · 1667 阅读 · 0 评论 -
【Spring Boot】条件化自动装配
【引言】在前面的博客中,了解了Spring Boot的自动装配是如何实现的,这只是一个基础,对于自动装配,更专业的使用是可以做到条件化自动装配。【条件注解】Spring Boot中,提供了以下条件化注解:条件化注解配置生效条件@ConditionalOnClassClasspath里有指定的类@ConditionalOnMissingClassClasspat...原创 2019-10-25 16:51:49 · 496 阅读 · 0 评论 -
【Spring Boot】自定义starter
【引言】 Spring Boot应用中,Starter给我们开发带来了很大的便利,通常情况下,我们增加一个依赖就可以实现与第三方的集成,比如mybatis的集成,只需增加依赖:<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-...原创 2019-10-24 20:10:33 · 262 阅读 · 0 评论 -
【Spring Boot】自动装配
【引言】Spring原创 2019-10-23 19:35:28 · 207 阅读 · 0 评论 -
【Spring Boot】启动流程
【引言】运行Spring Boot方式有三种:1)打包用命令或者放到容器中运行;2)打包用命令或者放到容器中运行;3)直接执行 main 方法运行。本篇博客,从main方法出发,梳理下启动过程。【启动流程】启动类,方法很简单,main方法中仅有一个run方法: public static void main(String[] args) { SpringAppli...原创 2019-10-22 19:44:34 · 212 阅读 · 0 评论 -
【Spring Boot】Mybatis Plus 2.X 条件查询
【引言】原创 2019-06-01 11:07:04 · 3148 阅读 · 1 评论 -
【Spring Cloud】Eureka Server源码解析
【学习背景】 在上篇文章中,分析了Eureka Client的源码,核心类是DiscoveryClient,完成了Client端的主要工作。本篇博客接着分析Eureka Server端。【学习内容】 ...原创 2019-05-26 13:21:08 · 984 阅读 · 1 评论 -
【Spring Cloud】Eureka Client源码解析
【学习背景】 在上一篇文章中,总结了Eureka中的相关组件与行为,也是分析其原理的第一步。本篇文章,先从Eureka Client出发,了解其是如何运行的。【学习内容】 先看下图,分阶段地展示了Eureka Client需要完成的工作: 在上图中,像...原创 2019-05-12 02:27:24 · 367 阅读 · 1 评论 -
【Spring Cloud】Eureka相关组件总结
【学习背景】 在前面的Spring Cloud系列学习文章中,把几个重要的组件总结并搭建了相关的demo,对于应用来说,基本上知道该如何集成了。 但仅仅停留在应用方面,是远远不够的,对于其中的原理及源码,有时间也是需要学习一下。本篇博客先简单地开个头,总结下Eureka注册中心中的相关组件,也是了解原理...原创 2019-05-12 00:55:07 · 514 阅读 · 0 评论 -
【CAS】自定义数据库连接配置
在上一篇博客中,对CAS进行了整体的介绍,我们知道,CAS可分为Server和Client。本篇博客开始介绍对CAS Sever进行的一些自定义配置。【版本说明】:CAS Server 4.0【下载地址】:https://github.com/apereo/cas/releases/tag/v4.0.0【构建方法】: 1. 将下载好的cas-server-4.0.0-relea原创 2017-04-01 11:26:13 · 4628 阅读 · 13 评论 -
【Spring Boot】Mybatis Plus 3.1.X 自动生成代码配置
【引言】 在前面的spring boot与mybatis plus 集成的相关博客中,用的是2.x的版本,而mybatis plus已经发布3.1.x版本,所以,参照着官方文档,将集成spring boot应用,实践下代码自动生成。【核心源码】 AutoGenerator 是 MyBatis-Plus...原创 2019-06-03 23:15:57 · 4991 阅读 · 12 评论 -
【Spring Boot】IDEA + Maven + Spring Boot + Dubbo + Mybatis Plus
【引言】 Spring Cloud和Dubbo是当前微服务架构中主流技术选型方案。Spring Cloud为我们的微服务架构提供了整套的技术体系方案,所以被称作为“全家桶”。 而关于dubbo的发展,曾经看到过停止维护的相关消息,使得很多公司转向Spring Cloud,而2017年9月,dubbo源码...原创 2019-07-26 23:34:51 · 2200 阅读 · 3 评论 -
【安装教程】Zookeeper 3.4.14 + Dubbo Admin 2.7
【引言】在上篇文章中,提供了整合Spring Boot + Dubbo的整合步骤,而在此过程中,其实需要安装一些软件环境,例如Zookeeper。所以本篇博客简单记录下相关软件安装和环境配置的过程。【安装教程】1. Zookeeper安装(Windows版本)下载http://archive.apache.org/dist/zookeeper/解压选择一个版本,解压后,可以看...原创 2019-07-27 00:39:20 · 2574 阅读 · 0 评论 -
【安装教程】Linux RocketMQ 4.5.1安装及问题总结
【引言】前段时间在项目中添加了对接RocketMQ4.5.1版本的客户端代码,服务端不是自己搭建的,所以自己在虚拟机上试验了一把,过程中遇到不少问题,写篇博客记录一下。【环境】Java版本:java version “1.8.0_162”Maven版本:Apache Maven 3.5.0RocketMQ版本:rocketmq-rocketmq-all-4.5.1【步骤】下载压...原创 2019-08-31 01:00:01 · 1786 阅读 · 0 评论 -
【Spring Boot】IDEA + Maven + Spring Boot + RocketMQ 4.5.1
【引言】在上篇博客中,完成了RocketMQ服务端的搭建,并且完成了控制台的部署工作,以便在与客户端集成过程中查询及处理问题。本篇博客,将使用SpringBoot与RocketMQ集成,实现消息的生产与消费。【版本说明】Java Version:1.8Spring Boot Version:2.1.7.RELEASERocketMQ Client Version:4.5.1【项目结...原创 2019-09-08 23:38:54 · 1596 阅读 · 0 评论 -
【RocketMQ】各组件概念介绍
【引言】【核心概念】生产者(Producer)生产者是指将由业务系统产生的消息发送到brokers中。RocketMQ提供了多种发送消息的模式:同步的、异步的和单向的。生产组(Producer Group)具有相同角色的生产者组合在一起。如果原始生产者在事务之后崩溃,在相同组中的生产者的另一个不同的实例则可以通过broker联系,提交或回滚事务。消费者(Consumer)消费者从b...原创 2019-09-15 13:52:20 · 1854 阅读 · 0 评论 -
【Spring Cloud】集成Apollo分布式配置中心
【学习背景】 在上一篇博客中,学习并实践了Spring Cloud管理配置文件的组件Config,也用不同方式实现其刷新机制。而对于分布式配置中心,除了Spring Cloud Config,如Apollo、Disconf等,也都可以帮助我们实现分布式配置管理的功能。本篇博客就将实现Spring Cloud应用与Apollo分布式配置的集成。【学习...原创 2019-05-01 07:39:30 · 6482 阅读 · 1 评论