- 博客(62)
- 收藏
- 关注

原创 【09】分布式事务Seata 之 TCC事务模式
准备工作第一步:先创建一个空工程:seata-tcc第二步:将无事务订单项目解压到seata-tcc文件夹下。(可访问 git 仓库 https://gitee.com/benwang6/seata-samples下载无事务订单项目)第三步:在IDEA 按两下 shift 搜索add maven project,选择需要导入的模块的pom.xml文件,将项目都导入工程中。TCC事务入门案例父工程添加seata依赖打开父工程order-parent的pom.xml文件,取消seata依赖的注释。
2021-08-30 10:03:13
486

原创 分布式事务--订单案例准备
订单业务案例1. 准备工作1.1 创建空工程 empty project: seata-at1.2 创建spring模块 db-init1.3 添加依赖jdbc api、mysql driver、springboot版本:2.3.2.RELEASE <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-start
2021-08-25 09:15:19
295

原创 【02】Nacos-服务注册中心
1. Nacos注册中心简介1.1 背景分析在微服务中,首先需要面对的问题就是如何查找服务(软件即服务),其次,就是如何在不同的服务之间进行通信。如何更好更方便的管理应用中的每一个服务,如何建立各个服务之间联系的纽带,由此注册中心诞生(例如淘宝网卖家提供服务,买家调用服务)。市面上常用的注册中心有Zookeeper(雅虎Apache),Eureka(Netfix),Nacos(Alibaba),Consul(Google)。下面我们选择Nacos进行学习,Nacos它很好的支持了阿里的双11活动,不仅
2021-07-28 20:53:16
1815

原创 【01】微服务架构分析及发展
1. 微服务简介1.1 背景分析先分析一下单体应用。所谓单体应用一般是基于idea/eclipse,maven等建一个工程,然后基于SpringBoot,Spring,Mybatis框架进行整合,接下来再写一堆dao、mapper、service、controller,再加上一些的配置文件,有可能还会引入redis、elasticsearch、mq等其它项目的依赖,开发好之后再将项目打包成一个jar包/war包。然后再将包扔到类似tomcat这样的web服务中,最后部署到公司提供给你的Linux服务器上
2021-07-27 18:53:23
544
原创 【04】RabbitMQ的集群机制
虽然他对系统资源消耗比较高,但是在生产环境中,系统的资源都是会做预留的,所以正常的使用是没有问题的。其中,pattern 是队列的匹配规则, ^ 表示全部匹配,^ ha \ 这样的配置表示以ha开头。在实际项目中,通常建议搭建奇数台服务的集群,因为这样的集群对官方推荐的Quorum对列更友好。通常在生产环境中,为了减少RabbitMQ集群之间的数据传输,在配置镜像策略时,会针对固定的虚拟主机virtual host来配置。可以类比为MySQL中的库,针对每个虚拟主机,可以配置不同的权限、策略等。
2024-10-26 16:05:55
1657
1
原创 【03】RabbitMQ核心功能扩展
在目前版本下,使用RabbitMQ的SpringBoot框架集成,可以正常声明Stream队列,往Stream队列发送消息,但是无法直接消费Stream队列了。这时,Sharding插件提供了一种伪队列的消费方式。另外,你会注意到,在对队列进行配置时,只有Classic经典队列和Quorum仲裁队列才能配置死信队列,而目前Stream流式队列,并不支持配置死信队列。你当然可以针对每个队列去单独声明消费者,这样当然是能够消费到消息的,但是这样,你消费到的消息就是一些零散的消息了,这不符合分片的业务场景要求。
2024-10-22 21:03:49
889
原创 【02】RabbitMQ客户端应用开发实战
官网示例中的集中路由策略, direct,fanout,topic等这些Exchange,都是以routingkey为关键字来进行消息路由的,但是这些Exchange有一个普遍的局限就是都是只支持一个字符串的形式,而不支持其他形式。我们可以回顾下,发送者发送消息的基础API:channel.basicPublish方法是没有返回值的,也就是说,一次发送消息是否成功,应用是不知道的,这在业务上就容易造成消息丢失。amqp是一种标准的消息驱动实现协议,RabbitMQ是对这一协议的具体实现。
2024-10-20 21:19:10
960
原创 【02】Redis的数据安全性分析
Redis提供了很多跟数据持久化相关的配置,大体上,可以组成以下几种策略:无持久化:完全关闭数据持久化,不保证数据安全。相当于将Redis完全当做缓存来用。RDB(RedisDatabase):按照一定的时间间隔缓存Redis中所有数据的快照。AOF(Append Only File):记录Redis服务器中执行的每一次写操作。这样可以通过操作重演的方式恢复Redis的数据。RDB+AOF:同时保存Redis的数据和写操作。RDB与AOF各自的优缺点:RDB的优点。
2024-10-16 21:14:36
645
原创 【01】深入理解Redis线程模型
Redis,远程字典服务,是一个完全开源的、高性能的 Key-Value键值对数据库。Redis的线程模型整体还是多线程的,只是后台执行指令的核心线程是单线程的。整个线程模型可以理解为还是以单线程为主。基于这种单线程为主的线程模型,不同客户端的各种指令都需要依次排队执行。Redis这种以单线程为主的线程模型,相比其他中间件,还是非常简单的。这使得Redis处理线程并发问题,要简单高效很多。甚至在很多复杂业务场景下,Redis都是用来进行线程并发控制的很好的工具。
2024-10-14 20:54:25
1114
原创 【11】微服务链路追踪SkyWalking
对于一个大型的几十个、几百个微服务构成的微服务架构系统,通常会遇到下面一些问题,比如:如何串联整个调用链路,快速定位问题?如何缕清各个微服务之间的依赖关系?如何进行各个微服务接口的性能分折?如何跟踪整个业务流程的调用处理顺序?skywalking是一个国产开源框架,2015年由吴晟开源 , 2017年加入Apache孵化器。skywalking是分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。
2024-07-20 17:59:38
904
原创 【07】分布式事务解决方案
事务()是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。在关系数据库中,一个事务由一组SQL语句组成。原子性一致性隔离性持久性。任何事务机制在实现时,都应该考虑事务的ACID特性,包括:本地事务、分布式事务。
2024-07-14 09:31:57
1215
原创 【04】微服务通信组件Feign
Feign是Netflix开发的声明式、模板化的HTTP客户端,其灵感来自Retrofit、JAXRS-2.0以及WebSocket。Feign可帮助我们更加便捷、优雅地调用HTTP API。Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等。Feign 提供了很多的扩展机制,让用户可以更加灵活的使用。自定义拦截器实现认证逻辑(只有请求拦截,没有响应拦截)@Overridelogger.info("feign拦截器");在配置类中进行配置/*** 自定义拦截器。
2024-07-07 11:31:15
888
原创 【03】微服务负载均衡器Ribbon
通过实现 IRule 接口可以自定义负载策略,主要的选择服务逻辑在 choose 方法中。@Override@Override//获取当前请求的服务的实例修改配置文件StockService: #被调用的服务名ribbon:NFLoadBalancerRuleClassName: com.example.ribbon.CustomRule # 设置为自定义的策略。
2024-07-07 10:44:49
830
原创 【03】Mybatis的配置文件与基于XML的使用
如果数据库表的字段与POJO的属性名不一致时,除了可使用'AS'来设置别名,还可以使用resultMap来设置自定义结果集,注意:resultType与resultMap二者只能使用其一。id:唯一标识,需要与select标签中的resultMap进行关联;type:需要映射的Pojo类型;:是否自动映射,默认为false,只要字段名与属性名遵循映射规则就可以自动映射;extends。
2024-06-26 22:06:22
2112
原创 【02】Mybatis的介绍与快速入门
MyBatis 是一款优秀的半自动化持久层ORM框架,它支持自定义SQL语句、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的XML文件或者注解的方式来配置和完成对象关系映射(具体指:类与数据库表的关系、类属性与表字段的关系)。特点优点:简化了JDBC的开发,封装了繁杂冗余的JDBC操作,提高了开发的效率;是一款简单易学的持久层框架;将SQL从Java代码中分离了出来,降低了代码依赖的耦合度,且SQL可重用;
2024-06-22 22:16:53
975
原创 【11】Spring声明式事务
在Spring中为了更加方便的操作JDBC,在JDBC的基础之上定义了一个抽象层,此设计的目的是为了给不同类型的JDBC操作提供模板方法,每个模板方法都能控制整个过程,并允许覆盖过程中的特定任务,通过这种方式尽可能的保留了灵活性,将数据库存取的工作量降到最低。
2024-06-06 07:53:15
865
原创 【05】SpringBoot热部署与日志
为了进一步提高开发效率,SpringBoot为我们提供了全部项目热部署,日后在开发过程中修改了部分代码或者相关配置文件之后,不需要再重启服务使其生效。在项目中开启了全局热部署之后,只需要在修改之后等待几秒钟就可使修改生效。
2024-05-29 07:26:16
949
原创 【03】SpringBoot自动装配原理
应用标注在某个类上,说明这个类是SpringBoot的主配置类,SpringBoot的项目需要运行这个类的main方法来启动SpringBoot应用的服务;
2024-05-25 22:01:42
456
原创 【01】RabbitMQ快速上手以及核心概念详解
一、MQ概述1、什么是MQ?MQ:消息队列(MessageQueue)。队列是一种FIFO先进先出的数据结构。消息由生产者发送到MQ中进行排队,然后按原来的顺序交由消息的消费者来处理。QQ和微信就是典型的MQ。官网地址2、MQ的作用(优点)异步作用:提高系统的响应速度、吞吐量。所有的请求不用再等待去发送消息了,任何时候都可以将消息发送出去,然后接着去干别的事情。例如:快递员配送快递,直接送到客户的家里效率十分的低下,当引入菜鸟驿站后,快递员只需把快递放到菜鸟驿站,就可以继续去派送其他快递
2024-05-18 19:19:10
200
原创 SpringCloud之随堂笔记
eureka运行机制(1)注册:客户端会一次一次反复连接服务器,直到注册成功为止(2)拉取:客户端每30秒重复拉取注册表,刷新注册表(3)心跳:客户端每30秒发送一次心跳数据,服务器在连续3次收不到一个服务的心跳后,会删除这个服务(4)自我保护模式:由于网络不稳定,或网络中断,15分钟内,85%服务器出现心跳异常,会进入保护模式,保护所有注册信息不删除网络恢复之后,会自动退出保护模式恢复正常,开发调试期间,可以禁用保护模式,避免影响测试。zuul网关zuul API 网关,为微服务应用提供
2024-05-16 22:36:30
939
1
原创 JAVA-Code模块
1. Java基础语法1.1 标识符标识符可以简单的理解成一个名称。在Java中,我们需要标识代码的很多元素,例如:包括类名、方法名、字段名、变量名、包名等,我们选择的那个名称就称为标识符。标识符语法需要遵循以下规则:标识符可以由字母、数字、下划线(_)、美元符($)组成,但不能包含 @、%、空格等其它特殊字符不能以数字开头。如:123name 就是不合法的。标识符严格区分大小写。如: tmooc 和 tMooc 是两个不同的标识符。标识符的命名最好能反映出其作用,做到见名知意。标识符不能
2024-05-16 22:34:15
696
原创 04-Json/Ajax/Vue的知识
1. Json结构1.1 Json概述JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,实现数据前后端交互。它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。 JSON采用完全独立于程序语言的文本格式。这些特性使JSON成为理想的数据交换语言。1.2 Json基本格式1.2.1 对象格式对象(object)是无序的"key":value键值对集合,一个对象以“{”开始,“}”结束,每个"key"后面跟一个:,键值对之间使用,分隔。例如
2024-05-16 22:31:29
837
原创 数据结构常考知识总结
线性结构和非线性结构的分类线性结构有:线性表、栈、队列、串(最多只有一个直接前驱和一个直接后继);非线性结构有:树、图、多维数组、广义表;存储结构顺序存储、链式存储、索引存储、散列存储数据元素之间的逻辑结构集合、线性结构、树型结构、图状结构循环队列中根据头尾指针计算元素的个数(rear-front+N)% N二叉树的性质前序遍历和中序遍历结果相同的二叉树为所有结点只有右子树的二叉树。前序遍历和后序遍历结果相同的二叉树为只有根节点的二叉树。哈夫曼树的带权路径长度如
2024-05-16 22:30:41
346
原创 选择排序算法
package 排序算法.选择排序;import java.util.Arrays;/** * 算法思想:第一个位置的值与后面所有位置的值做比较,如果满足就不交换,不满足就交换,直到比较完所有的数。 */public class ChooseSort { public static void main(String[] args) { int[] array = {0,12,5,25,8,4,2,7,41}; int[] result = Choose
2021-12-14 13:34:53
51
原创 插入排序算法
package 排序算法.插入排序;import java.util.Arrays;public class InsertionSort { /** *算法思想: * 1、将整个数组分为待排序和已排序两部分,每次从待排序中拿到一个数,从已排序的末尾去与其他元素做比较; * 2、当出现已排序的元素大于当前数时,就把当前数继续往前插入; * 3、当出现当前数大于等于前面的已排序元素时,就停下来,插入完成; */ public stati
2021-12-14 13:34:17
53
原创 快速排序算法
package 排序算法.快速排序;import java.util.Arrays;/** * 算法思想:从待排序列中随便选择一个元素作为基准,使得基准左边的元素都比它小,右边的都比它大,然后就一直按照这个 * 操作做递归,最终完成排序。 */public class QuikSort { public static void main(String[] args) { int[] array = {0,12,-5,3,8,4,2,-7,1}; qu
2021-12-14 13:33:43
53
原创 归并排序算法
package 排序算法.归并排序;import java.util.Arrays;/** * 归并排序是典型的分治法应用, * 总共分为两大步, * 第一步:对给定待排序数组分解成两部分(主要采用递归的方法),每部分是有序的; * 第二步,合并这两部分; */public class MegerSort { public static void main(String[] args) { int[] array = {0,12,-5,3,8,4,2,-7,1}
2021-12-14 13:32:58
49
原创 冒泡排序算法
package 排序算法.冒泡排序;import java.util.Arrays;public class BubbleSort { public static void main(String[] args) { int[] array = {5,3,8,4,2,7,1}; int[] sortArray = BubbleSorts(array); System.out.println(Arrays.toString(sortArray)); }
2021-12-14 13:32:10
48
原创 二分查找算法
package 排序算法.二分查找;public class binarySearch2 { //通过迭代的思想实现二分查找算法 public static void main(String[] args) { int[] array = {0,12,-5,3,8,4,2,-7,1}; int index = BinarySearch(array, 8,0,array.length - 1); System.out.println("指定
2021-12-14 13:30:29
50
原创 【02】SpringBoot的简介与入门
1. SpringBoot 简介1.1 背景分析在传统JAVAEE应用体系中创建一个项目,需要手动添加大量的依赖,还要考虑版本兼容性的问题,还有繁重的配置、负载的项目部署,会高度影响开发效率,即使是使用Spring进行资源整合,也存在同样的这些问题。还有就是现在的软件生态应用也已经形成一定的规模,整个软件架构体系在变化,企业对技术的要求也在变化,现在的企业更注重技术的开箱即用,更注重技术在生态圈中的深度融合,更注重轻量级的运维。由此由此spring boot诞生。1.2 作用Spring Boot是
2021-09-14 20:43:37
271
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人