准备工作
首先需要下载RabbitMQ延迟队列插件,官网下载地址,我本地的RabbitMQ版本是3.12.10所以下了个同版本的延迟队列插件3.12.10插件下载地址。
将下载插件包放到RabbitMQ安装目录下的plugins文件夹中。
在RabbitMQ目录下的sbin文件夹中打开CMD输入命令:rabbitmq-plugins enable rabbitmq_delayed_message_exchange出现如图提示表示安装成功。
执行重启RabbitMQ命令 RabbitMQ Service - start , RabbitMQ Service - stop 浏览器进入RabbitMQ管理页面http://localhost:15672 在 exchanges 选项中找到 Add a new exchange - type 下拉选中有 x-delayed-message 表示延迟队列插件已经成功安装好了。
RabbitMQ 延时队列取消订单
实现思路和之前差不多,创建订单成功后,发一个带有订单信息的延时消息,然后当到达指定时间后,判断一下订单是否未支付。如果已支付 ...
ShardingSphere简介Apache ShardingSphere 是一款分布式的数据库生态系统, 可以将任意数据库转换为分布式数据库,并通过数据分片、弹性伸缩、加密等能力对原有数据库进行增强。它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成,我们只关注 Sharding-JDBC 即可。Sharding-JDBC 定位为轻量级Java框架,在Java的JDBC层提供的额外服务。 它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架的使用。Sharding-JDBC 主要功能:数据分片 和 读写分离 通过Sharding-JDBC ,应用可以透明的使用jdbc访问已经分库分表、读写分离的多个数据源,而不用关心数据源的数量以及数据如何分布。
SpringBoot整合ShardingSphere本次记录项目版本为SpringBoot(2.4.0),ShardingSphere(4.0.0-RC1)
PS:由于ShardingS ...
ES简介Elaticsearch,简称为ES,它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理 PB 级别的数据。全文搜索引擎Google,百度类的网站搜索,它们都是根据网页中的关键字生成索引,我们在搜索的时候输入关键字,它们会将该关键字即索引匹配到的所有网页返回;还有常见的项目中应用日志的搜索等等。对于这些非结构化的数据文本,关系型数据库搜索不是能很好的支持。
一般传统数据库,全文检索都实现的很鸡肋,因为一般也没人用数据库存文本字段。进行全文检索需要扫描整个表,如果数据量大的话即使对 SQL 的语法优化,也收效甚微。建立了索引,但是维护起来也很麻烦,对于 insert 和 update 操作都会重新构建索引。
全文搜索引擎指的是目前广泛应用的主流搜索引擎。它的工作原理是计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索 ...
后端开发
未读
在配置MySQL主从同步以前要确地本地至少已经有2个及以上服务在同时运行。可参考相同IP运行多个MySQL服务一文。我这里是有3个mysql服务在运行,mysql1为主库master(端口3306),mysql2为从库slave(端口3307)之前已经配置好主从同步了,mysql3为从库slave2(端口3308)这次主要用3308库来演示同步配置。
打开Navicat,连上MySQL,运行命令列界面
输入查看主库状态命令:1show master status;
File: 对应从库的配置文件Position: 位置大小后面需要用到Binlog_Do_DB: 需要同步的数据库Binlog_Ignore_DB: 不需要同步的数据库可在my.ini的配置文件中进行修改。
给主库添加从库用户,在用户中新建用户,主机的 % 标识任何ip都可以连接到主库,然后把服务器的权限都勾选上。
打开从库的命令行(slave2端口3308)并输入命令:1change master to master_host='192.168.1.108',master_user=' ...
在Windows本地同时运行2个MySQL服务,首先要删除系统用户的环境变量(如果本地MySQL数据库中没有存放太多数据建议直接导出数据后卸载)。
下面开始安装主库master
在MySQL官网下载最新免安装版本(.zip的文件),官网下载地址 百度网盘地址
解压后,创建一个my.ini的文件,为主库添加以下配置
123456789101112131415161718192021222324252627282930313233[mysqld]#主库和从库需要不一致server-id=48log-bin=mysql-bin#同步的数据库binlog-do-db=test #不需要同步的数据库binlog-ignore-db=mysql# 设置3308端口port=3308# 设置mysql的安装目录basedir=D:\Program Files\mysql-8.1.0-winx64_3308# 设置mysql数据库的数据的存放目录datadir=D:\Program Files\mysql-8.1.0-winx64_3308\Data# 允许最大连接数max_connectio ...
需求说明
由于演示项目是在本地,要实现读写分离需要运行两个MySQL服务,具体配置请参考 相同IP运行两个MySQL服务 一文。
数据库的主从同步请参考 MySQL配置主从同步 一文。
给项目导入maven依赖
12345<dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>3.4.1</version></dependency>
在application.yml中,重新配置数据源的主表和从表连接信息。
123456789101112131415161718spring: jackson: time-zone: GMT+8 # 主从配置数据源 datasource: dynamic: primary: master # 设置默认的数据源或者数据源组,默认值即为m ...
实现原理生成订单时,往MQ传递一个消息设置有效期30分钟,再该信息失效的时候(没有被消费的情况下),执行客户端的一个方法来告知我们信息已经失效(消息过期投递到死信队列),这时候我们在对订单做处理。
声明死信队列相关的属性12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667@Configurationpublic class OrderDlxConfig { /** * 订单交换机 */ @Value("${wind.order.exchange}") private String orderExchange; /** * 订单队列 */ @Value("${wind.order.queue}") private String orderQueue; ...
需求说明在涉及到支付相关的应用中,通常需要实现个功能,用户在生成订单一段时间未完成支付,系统将会自动取消这个订单。本文将基于SpringBoot项目实现订单超时未支付的几种方案策略。
方案1:定时任务
利用SpringBoot中的 @Scheduled 注解,实现定时任务。周期性的检查数据库中是否存在超时未支付的订单,如果存在则取消。代码如下:(cron在线生成表达式参考)1234567891011121314151617@Scheduled(cron = "0 0/1 * * * ? ")public void cancelUnpaidOrders() { log.info("每分钟扫描超过30分钟未支付的订单"); List<FuOrder> list = orderService.list(); for (FuOrder fuOrder : list) { if (fuOrder.getCreateTime().plusMinutes(30).isBefore(LocalD ...
什么是MQMQ(Message Quene) : 翻译为 消息队列,通过典型的 生产者和消费者模型,生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的,而且只关心消息的发送和接收,没有业务逻辑的侵入,轻松的实现系统间解耦。别名为 消息中间件 通过利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。
下载Erlang和RabbitMQRabbitMQ是使用Erlang语言开发的开源消息队列系统,所以安装RabbitMQ前需要先安装下Erlang。Erlang官网地址,如果下载速度慢可以从我的云盘里下载。
引用站外地址
Erlang安装包
百度云下载
RabbitMQ官网地址
引用站外地址
Rabb ...
需求说明项目中会有使用配置文件来存放敏感信息(比如数据库密码、redis等),但生产环境中如果采用明文配置将会有安全问题。为了消除安全隐患,最直接的方式就是把明文敏感信息加密,解密。Jasypt 框架提供了很好的解决方案。
Jasypt 简介Jasypt 是一个Java库,Java加密包,用于加密和解密敏感数据,它允许开发人员以很简单的方式添加基本加密功能,且无需深入研究加密原理。
Jasypt的功能特性
安全性高
线程安全
配置性能高
跨语言平台等
详细介绍请见Jasypt官网
在SpringBoot项目中如何使用Jasypt
添加Jasypt依赖
12345<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.3</version></dependency>
yml配置文件
123jasypt ...