自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

穷水叮咚的博客

主要针对,学习和工作中发现的问题,进行记录和整理,然后和大家分享讨论。

  • 博客(355)
  • 收藏
  • 关注

转载 彻彻底底搞懂CAS,解决ABA问题

前言:如果不知道JMM(java 内存模型),还请看博主的上一篇博客:volatile关键字与内存可见性详解,因为本博客还需要JMM的理论基础。博客内容导图1、CAS是什么CAS(Compare-And-Swap)是一种硬件对并发的支持,针对多处理器操作而设计的处理器中的一种特殊指令,用于管理对共享数据的并发访问. CAS 是一种无锁的非阻塞算法的实现。以上是一本书给出的定义。其实我们在上篇博客已经提过CAS了,AtomicInteger 实现num++,AtomicInte...

2021-04-02 11:41:50 1485 1

转载 缓存穿透终极解决方案——布隆过滤器

前言不知道从什么时候开始,本来默默无闻的布隆过滤器一下子名声大噪,在面试中面试官问到怎么避免缓存穿透,你的第一反应可能就是布隆过滤器,缓存穿透=布隆过滤器成了标配,但具体什么是布隆过滤器,怎么使用布隆过滤器不是很清楚,那今天我们就来把它说清楚,讲明白。。缓存穿透大家看下这幅图,用户可能进行了一次条件错误的查询,这时候redis是不存在的,按照常规流程就是去数据库找了,可是这是一次错误的条件查询,数据库当然也不会存在,也不会往redis里面写值,返回给用户一个空,这样的操作一次两次还好,.

2021-03-15 16:38:48 1740 1

转载 Seata AT模式

前言我们在之前所介绍的一些分布式事务的理论,是需要通过具体的框架工程化的,这样才能在我们日常工作中使用。常见的开源分布式事务框架很多,比如: Seata、EasyTransaction等等。我们在这篇文章将会介绍阿里开源的分布式事务框架Seata。Seata这个分布式事务框架支持有多种模式,如: AT、TCC、SAGA、XA。除了AT,后面三种分布式事务模式的大致流程,我们在之前的文章中有介绍过。Seata的模块组成1)TM:事务发起者。定义事务的边界,负责告知 TC,分布式事务的开始,

2021-02-06 10:57:12 1702

原创 springcloud+mybatis-plus+seata v1.4.0+nacos 分布式事务整合

整这个demo 整了几天 分布式事务始终不回滚 差点让我怀疑人生。。。。demo 参考的是这个大兄弟的https://gitee.com/zjoin/seata-study.git万分感谢本次demo地址:https://gitee.com/jamesPanNew/seata-study.git不说整合版本就是耍流氓Springcloud Hoxton.SR9seata 1.4.0mybatis-plus 3.4.1Springboot 2.3.7.RELEA...

2021-02-05 17:52:19 1041 1

转载 Docker 配置 Seata 集成 Nacos

运行命令安装seatadocker pull seataio/seata-server运行seata 镜像docker run --name seata -p 8091:8091 -d seataio/seata-server创建本地配置文件的文件夹cdcd /cd /homemkdir dockerscd dockersmkdir seatacd seata复制配置文件docker cp seata:/seata-server /home/dock..

2021-01-21 22:27:20 1050

原创 docker 安装nacos并持久化到mysql

拉取Nacos镜像到本地dockerdocker pull nacos/nacos-server[root@10-13-4-243 ~]# docker pull nacos/nacos-serverUsing default tag: latestlatest: Pulling from nacos/nacos-server5ad559c5ae16: Pull complete a2e30b74e44b: Pull complete 385912b57b4a: Pull comple

2021-01-21 21:59:46 1132 1

转载 rocketmq发送消息的三种方式

从功能上来说,rocketmq支持三种发送消息的方式,分别是同步发送(sync),异步发送(async)和直接发送(oneway)。下面来简单说明一下这三种发送消息的方式,以便了解它们之间的差异。以下的案例代码将会使用spring-message风格进行展示,即使用rocketMQTemplate方式,详见rocketmq-spring同步发送sync发送消息采用同步模式,这种方式只有在消息完全发送完成之后才返回结果,此方式存在需要同步等待发送结果的时间代价。这种方式具有内部重试机制,.

2020-12-24 15:56:13 3282 2

转载 4 种高可用 RocketMQ 集群搭建方案

背景笔者所在的业务线,最初化分为三个服务,由于业务初期业务复杂度相对简单,三个业务服务都能很好的独立完成业务功能。随着产品迭代,业务功能越来越多后慢慢也要面对高并发、业务解耦、分布式事务等问题,所以经过团队内部讨论,引入 RocketMQ 消息中间件来更好的处理业务。由于公司内部业务线部署相互独立,我们业务线对引入 RocketMQ 的需求也比较急切,所以打算自己搭建一套高可用的 RocketMQ 集群,同时对于自建的 RocketMQ 集群需要如下特性:高可用 高并发 可伸缩 海量消

2020-12-24 15:17:47 434

转载 探秘 RocketMQ 消息持久化机制

我们知道 RocketMQ 是一款高性能、高可靠的分布式消息中间件,高性能和高可靠是很难兼得的。因为要保证高可靠,那么数据就必须持久化到磁盘上,将数据持久化到磁盘,那么可能就不能保证高性能了。RocketMQ 在兼容这两方面做的不错,先从磁盘说起,「现代的磁盘都是高性能的,写速度并不一定比网络的数据传输速度慢」。比如 SSD 固态硬盘在 M.2 NVMe协议下,顺序写的速度可以达到 1500 MB/s,就算是普通磁盘,如果性能比较高的话,顺序写的速度可以达到 450MB/s~600MB/s。在顺序写

2020-12-24 14:16:50 348

转载 Arthas - Java 线上问题定位处理的终极利器

转载图片失败,直接贴个网址了:https://cloud.tencent.com/developer/article/1534894

2020-12-15 20:15:27 137

转载 快速搭建一套elk日志系统

背景:在开发调试阶段,发现bug后开始在服务器上查找日志,但是这个过程真的好痛苦.一种方式是直接在服务器上tail -f 或者tail -n 直接查看,但是日志太多,不容易发现问题另一种方式导出最近的日志到本地,打开本地编辑器一点一点查看但是两种方式都很麻烦,有没有轻松一点的方法呢?在这个开源的时代,一直听说elk架构,那就搭建这个日志系统,感受下这个系统的魅力吧以下软件可以去:https://mirrors.huaweicloud.com下载很快基本服务介绍什么是elasticsea.

2020-12-09 23:11:45 656 1

原创 centos7 安装rocketmq

1.下载RocketMQ: wget http://archive.apache.org/dist/rocketmq/4.2.0/rocketmq-all-4.2.0-bin-release.zip2.解压缩文件到指定目录: unzip rocketmq-all-4.2.0-bin-release.zip -d /opt/rocketmq/rocketmq-all-4.2.0-bin-release3.设置环境变量: nameserver环境变量:vi /etc/profil...

2020-11-25 22:14:13 217

转载 基于Docker的Mysql主从复制搭建

为什么基于Docker搭建?资源有限 虚拟机搭建对机器配置有要求,并且安装mysql步骤繁琐 一台机器上可以运行多个Docker容器 Docker容器之间相互独立,有独立ip,互不冲突 Docker使用步骤简便,启动容器在秒级别利用Docker搭建主从服务器首先拉取docker镜像,我们这里使用5.7版本的mysql:docker pull mysql:5.7然后使用此镜像启动容器,这里需要分别启动主从两个容器Master(主):docker run -p 3339:330

2020-11-15 20:38:27 151

转载 使用VMware安装CentOS7系统后,无法联网

一、首先附上我使用的 VMWare 和 CentOS7 截图二、简单说一下我的情况一直以来一直想玩玩Linux,但是苦于没有机会,趁着冬天这么冷,只能窝在住的地方,从网上找了点资料,准备在自己的笔记本电脑上安装一个虚拟机,装下Linux 号试试Linux的命令。安装的过程到是挺简单的,网上的教程很多,也很详细,自己很顺利的就安装好。心里很开心。但是等到用从网上找来的命令来下载安装东西的时候出问题了。怎么都连不上网。解决方法①首先在windows 系统中 cmd 打开 命令窗口 ,

2020-10-27 20:57:01 910 1

原创 springboot 整个mqtt demo

demo 大致结构首先pom<dependency> <groupId>org.springframework.integration</groupId> <artifactId>spring-integration-stream</artifactId> </dependency> <dependency> .

2020-07-24 16:12:38 1667 2

原创 windows安装EMQ服务器(mqtt)和mqtt fx客户端以及消息测试

首先EMQ官网下载安装包https://www.emqx.io/downloads#broker解压到任意路径然后切换到emqx/bin目录下,shift+右键,打开powershell输入命令./emqx start启动成功后,打开浏览器输入localhost:18083网址可以进入dashboard 控制台界面(账号:admin 密码:public)如果能正常访问dashboard那么就基本安装成功了.emq 服务器安装成功然后安...

2020-07-24 15:41:07 2024 2

转载 扫盲贴:认识MQTT通信协议

1、概述MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议。MQTT协议技术文档:点此进入,当然也有PDF版的,百度一下,不过个人感觉不是官网上的字体和排版最舒服。MQTT是轻量级基于代理的发布/订阅的消息传输协议,它可以通过很少的代码和带宽和远程设备连接。

2020-07-24 15:17:19 1970

转载 Linux两台服务器之间复制文件及免密码登录的方法

有时候搭建集群机器是,需要在多台机器中间相互拷贝文件,一种方式是同事sftp拷贝到本机,再分别拷贝到其他服务器上。这里介绍一种直接在两台服务器之间拷贝文件且去掉繁琐的登陆操作的方法。两台服务器之间拷贝文件采用linux命令scp可以在两台电脑之间复制文件,如有两台服务器192.168.129.100/101,现在需要拷贝100 /etc/passwd文件到101服务器的/etc目录下,登陆100服务器,知道101的用户root的密码为123456scp /etc/passwd [email protected]

2020-06-03 14:39:01 760

原创 activiti 自定义节点完成条件

在activiti 中我们自定义实现节点满足某个条件时完成节点进行下一个节点在模型设计器中可以自己定义 nrOfInstances:实例总数 nrOfActiveInstances:当前活动的,比如,还没完成的,实例数量。 对于顺序执行的多实例,值一直为1。 nrOfCompletedInstances:已经完成实例的数目。 可以写成${nrOfCompletedInstances>0} //表示只要有人完成任务就通过该节点项目中刚开始是这种需求,在不..

2020-06-02 21:53:42 3456

原创 activiti 获取流程图所有节点

获取流程图所有节点//流程定义idString processDefinitionId = runtimeService.createProcessInstanceQuery().processInstanceId(procInstId).singleResult().getProcessDefinitionId();BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);Process process

2020-06-02 21:06:26 6755 4

原创 activiti 使用uuid作为主键

activiti默认的id生成器是DbIdGenerator我们修改成uuid添加pom<dependency> <groupId>com.fasterxml.uuid</groupId> <artifactId>java-uuid-generator</artifactId> <version>3.1.4</version></dependency>在...

2020-06-02 20:57:28 859

原创 activiti 并行网关中强制结束任务

在并行网关中如果强制结束任务可使用终结任务,结束任务对并行网关是不起作用的,并不会真正的结束流程如上面 两个并行节点只要有一个人驳回就结束流程 这时就可以使用终结任务 在网关设置走不同意的线就结束流程了...

2020-05-31 23:05:18 3019

原创 activiti 配置监听器 流程启动/结束 任务创建/结束

activiti 配置监听器 流程启动/结束 任务创建/结束监听的作用比如流程启动的时候更改一些单据的单据由待提交-》提交流程结束更改其审批状态任务创建的时候需要给待办推送信息任务结束的需要处理一些逻辑等等创建这4个监听器流程创建监听器package com.example.activiti.listener;import org.activiti.engine.delegate.event.ActivitiEvent;import org.activiti.engi

2020-05-31 22:48:54 3327

原创 activiti 获取部署的流程图

根据流程定义id查看部署的流程图或者xml文件根据ACT_RE_PROCDEF 中的id查看流程图package com.example.activiti.controller;import cn.hutool.core.io.IoUtil;import org.activiti.engine.RepositoryService;import org.activiti.engine.RuntimeService;import org.activiti.engine.repositor

2020-05-30 23:52:56 1662 3

原创 activiti 根据模型id部署流程

感觉每次画流程图好麻烦,但是又无可奈何,生无可恋,项目上我都是用流程设计器画好了。通过流程设计器保存的流程信息其中都会保存到act_re_model 里面,根据model_id 部署流程部署流程关键代码 根据act_re_model 中的id_ 部署流程将RepositoryService注入进来就可以了 // 获取模型 Model model = repositoryService.getModel(id); ObjectNode obj...

2020-05-30 23:09:20 3169 3

转载 Activiti数据库表结构

1Activiti数据库表结构1.1 数据库表名说明 Activiti工作流总共包含23张数据表,所有的表名默认以“ACT_”开头。并且表名的第二部分用两个字母表明表的用例,而这个用例也基本上跟Service API匹配。uACT_GE_*: “GE”代表“General”(通用),用在各种情况下;uACT_HI_*: “HI”代表“History”(历史),这些表中保存的都是历史数据,比如执行过的流程实例、变量、任务,等等。Activit默认提供了4种历...

2020-05-29 22:51:57 472

原创 springboot整合activiti的modeler流程设计器

前段时间一直在弄工作流的事情,也是我第一次搞工作流,本来很早就想写的,一直拖到现在,变懒了。。。。想了又想还是必须记录下,不然以后就忘了先说下版本springboot :2.1.6.RELEASEactiviti:5.22.0首先是整个activiti官方的编辑器到项目中来1.下载activiti5.22的源码包链接:https://pan.baidu.com/s...

2020-04-01 22:41:42 2900 1

转载 Activiti 流程图片显示乱码问题分析与解决

Activiti新手常见的问题是,部署成功流程后,获取显示的流程图片(PNG)为乱码,主要体现为中文无法正确显示。在这里分析一下乱码出现的原因,以及解决方案。不喜欢问为什么的同学可以直接跳到解决方法段落。表现Activiti流程图乱码常见有两种情况: 所有中文字符变成方块 所有中文字符变成无意义汉字 造成这两种情况的错误原因以及解决方法并不相同,但都与Activiti部...

2020-03-22 22:41:51 6585 5

原创 springcloud集成Oauth2权限项目-自定义参数解析器获取用户信息HandlerMethodArgumentResolver(十五)

每个接口在被调用时,很可能需要调用该接口的用户信息,每次再去数据库查询该数据信息,势必会造成代码的大量重复,且还容易出错。应用:把该次调用者用户的信息当做参数传到对应的方法。比如:根据token获得到用户信息,将用户信息传到对应请求的method。实现自定义参数解析器步骤:1、自定义参数解析器2、注册新建有个common modulePOM<?xml v...

2019-10-30 15:31:44 1213

原创 springcloud集成Oauth2权限项目-退出登录并清除redis中的access_token(十四)

当用户退出的时候,清除redis中token,其实很简单我直接在oauth服务中新建一个接口@RestController@RequestMapping("/authentication")public class UserController { @Autowired @Qualifier("consumerTokenServices") privat...

2019-10-30 14:29:32 10348 2

原创 zuul网关用无效的token调用oauth/check_token成功,解析失败

在网关拿到无效的token去oauth服务校验token的合法性,但是返回的数据解析失败的问题远程调用报错:org.springframework.web.client.HttpClientErrorException: 400 null at org.springframework.web.client.DefaultResponseErrorHandler.handleErro...

2019-10-29 18:08:46 4031

转载 客户端请求带“Authorization”请求头,经过zuul转发后丢失了

先摆解决方案:方法一:方法二:zuul.routes.<routeName>.sensitive-headers=zuul.routes.<routeName>.custom-sensitive-headers=true原因:Zuul进行路由转发时RibbonRoutingFilter过滤器,对请求参数和请求头进行了重新过滤和组装Ribbo...

2019-10-29 14:16:33 1770 1

转载 Innodb锁机制:Next-Key Lock 浅谈

数据库使用锁是为了支持更好的并发,提供数据的完整性和一致性。InnoDB是一个支持行锁的存储引擎,锁的类型有:共享锁(S)、排他锁(X)、意向共享(IS)、意向排他(IX)。为了提供更好的并发,InnoDB提供了非锁定读:不需要等待访问行上的锁释放,读取行的一个快照。该方法是通过InnoDB的一个特性:MVCC来实现的。InnoDB有三种行锁的算法:1,Record Lock:单个行记录上...

2019-09-24 11:32:06 219

转载 解决Nginx出现403 forbidden (13: Permission denied)报错的四种方法

我是在在本地用虚拟机中通过yum安装nginx的,安装一切正常,但是访问时报403,于是查看nginx日志,路径为/var/log/nginx/error.log。打开日志发现报错Permission denied,详细报错如下:2018/11/28 11:39:40 [error] 41772#41772: *130 "/home/hc/dists/autoAweme/dist/ind...

2019-09-24 09:14:25 3355

原创 springcloud集成Oauth2权限项目-网关校验权限控制(十三)

这一篇主要是写权限控制,在网关校验权限。大体思路:当用户访问一个url,在网关校验token是否合法,然后调用用户服务是否该用户有权限访问并返回一个boolean类型的值,网关检查返回的值来判断是否通过,没有权限拒绝访问数据库已上传到项目中首先是用户微服务需要增加接口供网关调用根据用户id,查询拥有的角色,然后在查找拥有的资源,我用的是请求方式|url,拼接的...

2019-09-23 23:14:46 2923 1

转载 Springsecurity-oauth2之RemoteTokenServices

Spring-security-oauth2的版本是2.2.3。RemoteTokenServices是用于向远程认证服务器验证token,同时获取token对应的用户的信息。 图1RemoteTokenServices会通过RestTe...

2019-09-09 16:10:31 11558 1

原创 springcloud集成Oauth2权限项目-网关校验access_token失败返回统一格式(十二)

在网关验证token失败时,往往我们需要返回统一的格式处理,在上一篇中,是oauth2定义的格式就像上面这种格式,我们需要改变这个格式,改造成下面的格式其实很简单,只需要在网关加入配置类就可以,建立一个exception包并创建AuthExceptionEntryPoint.java类package com.study.vcloud.zuul.exception...

2019-09-09 16:04:22 3220 1

原创 springcloud集成Oauth2权限项目-网关校验access_token的正确性才能访问接口(十一)

现在任何连接都要经过网关,所以在网关校验access_token的正确性,当access_token正确后,才转发到相应的服务。当获取access_token后,每次前端访问都要带上这个access_token。依次启动服务,eureka---->user------>oauth---------->zull顺序启动服务现在我们访问127.0.0.1:9999/use...

2019-09-05 23:27:31 7465 3

原创 springcloud集成Oauth2权限项目-oauth报错返回通用的格式(十)

一般后台返回数据都是统一的格式,类上code :xxx message:xxxx像上面这种前端不好取值,所以改造下,返回通用的格式添加三个异常类BootOAuth2Exception.javapackage com.pwl.blue.auth.exception;import com.fasterxml.jackson.databind.annotation.Json...

2019-09-03 21:30:34 3072 1

原创 springcloud集成Oauth2权限项目-token存入redis(九)

目的:将token存入redis是为了将token失效,防止以前的token还可以继续使用oauth pom加入redis 包<!--redis--> <dependency> <groupId>org.springframework.boot</groupId> &lt...

2019-09-03 18:12:01 3417 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除