摘要: 实际工作中生成二维码,通过手机进行扫码查看的需求比较多。Hutool 工具包中有很多实用的工具类,其中就包含二维码生成和识别的 QrCodeUtil 工具类,默认生成白底黑色的二维码,也可以自定义二维码的样式,比如设置背景色、前景色、设置边距以及在二维码中心显示自定义的 logo 等等,使用起来非常 阅读全文
posted @ 2023-11-16 21:27 乔京飞 阅读(16409) 评论(0) 推荐(2) 编辑
摘要: Sentinel 是阿里的一款微服务请求监控组件,能够通过配置实现流量控制,降级熔断,热点参数限流,授权规则限流,使用非常方便。官方默认只提供了流量控制配置规则持久化代码实现,这也是我们最常用的,上篇博客已经实现并进行了部署。 本篇博客基于上篇博客搭建好的 Sentinel 和 Nacos 环境,介 阅读全文
posted @ 2023-11-09 22:26 乔京飞 阅读(12666) 评论(0) 推荐(1) 编辑
摘要: 早期大家都使用 netflix 公司的 Hystrix 组件,通过编写代码实现对微服务接口的限流、熔断、隔离等保护措施,由于 Hystrix 组件不再更新迭代,逐渐被大家抛弃。当前大家基本上都使用阿里的 Sentinel 技术实现对微服务接口的访问监控和保护,其最大的优点就在于基本上不需要编代码,只 阅读全文
posted @ 2023-11-07 20:43 乔京飞 阅读(12101) 评论(0) 推荐(0) 编辑
摘要: 前面介绍了注解加拦截器的权限控制方式,在拦截器中解析注解配置进行权限控制。拦截器的方案:优点是比较简洁,缺点是只能在 controller 及其下面的方法配置注解控制权限。已经可以满足绝大多数项目的需求。 本篇博客介绍第二种方案,在 AOP 切面中解析注解配置进行权限控制。AOP 方案,优点是可以通 阅读全文
posted @ 2023-10-31 14:58 乔京飞 阅读(13046) 评论(0) 推荐(0) 编辑
摘要: 前面介绍了使用 SpringSecurity 进行权限控制,其中一个非常方便的特点就是:可以在类和方法上使用注解,从而实现对资源访问的权限控制。但是 Spring Security 具有一定的学习成本和复杂度,想要灵活驾驭并用好框架并非一件容易的事情,比如跟其它系统进行单点登录集成等等。 本篇博客介 阅读全文
posted @ 2023-10-30 22:17 乔京飞 阅读(12026) 评论(0) 推荐(0) 编辑
摘要: 对于 ElasticSearch8 集群,比较容易的方式就是无密码集群搭建。对于 ElasticSearch 来说,一般都是运行在内网中,可以通过防火墙限制来源 ip 或者通过 ElasticSearch 自身的配置来限制来源 ip。这种保障安全的方式比较类似于 Redis 。 对于 Kibana 阅读全文
posted @ 2023-10-24 17:05 乔京飞 阅读(13049) 评论(0) 推荐(0) 编辑
摘要: 在搜索过程中,大部分情况下会有智能提示功能,也就是开头匹配的自动补全功能,这就需要用到 ElasticSearch 的 Suggest 查询功能。用户也可能输入拼音或者查询关键字的首字母简写,比如我想查询华为手机,我可以输入 hwsj 进行查询,这就需要用到拼音分词器。本篇博客将介绍如何安装拼音分词 阅读全文
posted @ 2023-10-22 15:11 乔京飞 阅读(12202) 评论(0) 推荐(0) 编辑
摘要: 前面已经搭建好了单机版的 ElasticSearch 和 Kibana,接下来就可以通过 DSL 和 Java 代码操作 ElasticSearch。对于 ElasticSearch 来说,DSL(domain specific language )语言其实就是将 restful 请求和 Json 阅读全文
posted @ 2023-10-19 14:37 乔京飞 阅读(12518) 评论(0) 推荐(0) 编辑
摘要: ElasticSearch 是一款底层是基于 lucene 实现,功能强大的搜索引擎中间件,也可以认为 ElasticSearch 是一款 NoSql 数据库。每一种 NoSql 数据库的诞生,都是为了解决传统关系型数据库无法解决的问题,ElasticSearch 能够从海量数据中快速找到所需要的内 阅读全文
posted @ 2023-10-10 23:18 乔京飞 阅读(13094) 评论(0) 推荐(0) 编辑
摘要: RabbitMQ 是基于 Erlang 语言开发的,该语言天然支持集群分布式模式,因此部署 RabbitMQ 集群非常简单。 RabbitMQ 的集群部署有两种模式: 普通集群:又称为标准集群,是一种分布式集群,将队列分散到集群的各个节点,提高整个集群的并发能力。 镜像集群:在普通集群的基础上,添加 阅读全文
posted @ 2023-10-06 09:19 乔京飞 阅读(13320) 评论(0) 推荐(1) 编辑
摘要: 如果一个队列设置了死信交换机,该队列的消息就有了极大的可靠性保障,当出现以下情况时,消息就会投递到死信交换机中: 队列中的消息在被消费者处理后,抛出异常,返回了 nack 或者 reject 如果队列设置了 ttl 或者消息本身设置了 ttl ,消息因为超时而未消费 队列容量已经满了,后续发来的消息 阅读全文
posted @ 2023-10-05 10:41 乔京飞 阅读(12046) 评论(0) 推荐(0) 编辑
摘要: 在一些比较重要的场景中,我们必须要保障 RabbitMQ 消息的可靠性,也就是发送给 rabbitmq 的消息必须最终成功,消费者接收消息进行处理也必须最终成功。即使是中间失败了,也必须要有其它保障措施,哪怕最后进行人工进行干预处理。 消息出现丢失的场景主要有: 发送消息时丢失:比如消息发送到交换机 阅读全文
posted @ 2023-10-04 10:22 乔京飞 阅读(12400) 评论(0) 推荐(0) 编辑
摘要: 现在的网站开发,基本上都是前后端分离,后端提供 api 接口并进行权限控制。使用 Spring Security 框架可以大大简化权限控制的代码实现。对于后端接口而言,为了能够实现多节点负载均衡部署,更好的方案是不再使用 Session 了,绝大多数情况下,通过提交 JWT Token 来进行身份认 阅读全文
posted @ 2023-09-25 22:07 乔京飞 阅读(12332) 评论(0) 推荐(0) 编辑
摘要: Spring Security 是基于 Spring 框架提供的一套 Web 应用安全的完整解决方案,核心功能主要是认证和授权。认证主要是判断用户的合法性,主要体现在登录操作,最常用的认证方式是【基于表单的认证】和【基于OAuth2的认证】。授权主要体现在权限控制,也就是控制用户是否能够访问网站的相 阅读全文
posted @ 2023-09-17 19:35 乔京飞 阅读(12006) 评论(0) 推荐(0) 编辑
摘要: 生产环境中一般不可能将用户上传的文件存放在单机,绝大多数情况下会搭建文件服务器集群,确保文件的互相备份和高可用。上一篇博客已经对 FastDFS 分布式文件系统进行了介绍,这里不再赘述。由于我个人笔记本电脑性能有限,因此本篇博客将使用 2 台虚拟机搭建 FastDFS 集群,实现 2 台机器之间文件 阅读全文
posted @ 2023-09-05 22:56 乔京飞 阅读(12854) 评论(0) 推荐(0) 编辑
摘要: 我们工作中经常会有上传和下载文件的需求,早些年代我们一般会将上传的文件保存在网站所在的服务器上,但是现在一般网站都是负载均衡多服务器部署,因此必须要有独立的文件服务器才行。早些年代,如果有一台独立的文件服务器,一般会搭建 NFS 共享服务,给多个网站服务器之间使用。如果有多台文件服务器的话,各个服务 阅读全文
posted @ 2023-09-03 23:44 乔京飞 阅读(11965) 评论(0) 推荐(0) 编辑
摘要: 工作中难免会有一些定时调度需求,比如定时统计数据,定时清理垃圾等等。你可能用过 Quartz 框架,但是现在基本上已经被淘汰了,因为其使用起来还是有些复杂。目前单机定时任务基本上都使用基于 Spring 注解的定时调度,分布式定时任务基本上都使用 xxl job 定时调度,原因就是使用起来很非常简单 阅读全文
posted @ 2023-08-30 23:32 乔京飞 阅读(11639) 评论(0) 推荐(0) 编辑
摘要: 目前越来越多的项目和产品,需要具有空间查询的需求,如外卖送餐时骑手的定位,地图上搜索以自己为中心点附近的餐厅等等,所以当前基本上所有的关系型数据库以及 nosql 数据库都具有空间查询的函数功能。但是总体而言 nosql 数据库的空间查询性能更高,这里不深入探讨具体的原因,有兴趣可以自行查询资料或动 阅读全文
posted @ 2023-08-26 19:58 乔京飞 阅读(11791) 评论(0) 推荐(0) 编辑
摘要: 前面我们搭建了 mongodb 单机环境,但是在实际生产环境中,为了高可用,肯定需要搭建 mongodb 集群。mongodb 集群主要分为两种:副本集群和分片集群。其中副本集群搭建容易,是生产环境中使用最多的集群,因此很有必要掌握。 副本集群比较类似于 mysql 的主从复制,一主多从,每个节点的 阅读全文
posted @ 2023-08-20 11:51 乔京飞 阅读(13059) 评论(0) 推荐(0) 编辑
摘要: 本篇博客主要介绍 SpringBoot 如何通过 SpringData 操作 Mongodb。在上篇博客部署的 mongodb 为了方便,在 admin 库中创建了一个 root 角色的账号,使用这个账号具有最高权限,可以访问和操作任何库。在实际项目中强烈建议为每个 mongodb 数据库创建一个低 阅读全文
posted @ 2023-08-15 20:59 乔京飞 阅读(11626) 评论(0) 推荐(1) 编辑