![](https://img-blog.csdnimg.cn/cb05b07a918248e5b7b9d688e2883b68.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
分布式
文章平均质量分 59
分布式系统
汇来客智慧收银
这个作者很懒,什么都没留下…
展开
-
DeferredResult 提高系统吞吐量的一把利器
当一个接口处理耗时时,为了接口做出快速相应,释放tomcat资源,提高系统的吞吐量,sping3.0 以后引入DeferredResult。代码演示。原创 2022-08-18 14:18:45 · 405 阅读 · 0 评论 -
「RocketMQ」如何保证消息不丢失
当我们实际项目开发中,引入一个中间件都要考虑为什么要引进他,引进它会遇到哪些问题。首先为什么要引入消息队列解耦:分布式系统中涉及到的数据交互 削峰:高并发场景下,为了更快的作出相应,会考虑引入消息队列 异步:减少响应时间会遇到哪些问题呢系统的可用性降低:如果消息队列挂掉了,服务之间通讯就会受限 复杂性提高 数据丢失本文主要对「数据丢失」做一些分享 ...原创 2022-04-13 09:26:03 · 3727 阅读 · 0 评论 -
「某大厂二面」聊聊Java中的SPI机制
SPI service provider interface的简写SPI是什么SPI主要解决的还是耦合问题。我们知道面向接口编程是很好的编程方式。举一个简单的例子假设有一天你一不小心成为了你们组的组长,这时候经理要求你开发一个对象存储服务,统一一下公司内部的云存储服务,首先市面上的云存储有好多家,例如阿里的OSS,t...原创 2022-03-22 10:24:19 · 759 阅读 · 0 评论 -
「Netty」实战 Springboot + netty +websocket 推送消息(附源码)
源码地址:https://gitee.com/dugt/springboot-netty-demohttps://gitee.com/dugt/springboot-netty-demo上篇文章我们认识了NIO与传统BIO的区别之后,展开了对Netty的学习,Netty对NIO进行了很好的封装,简单的API,庞大的交流社区。该篇博客分享一下基础的netty使用。针对一些掌握netty简单API的同学。netty服务器@Componentpublic class NettyS..原创 2022-01-24 15:21:28 · 1728 阅读 · 1 评论 -
「Netty」Netty入门 认识NIO
现在使用NIO的场景越来越多,很多网上的技术框架或多或少的使用NIO技术,譬如Tomcat,Jetty。学习和掌握NIO技术已经不是一个JAVA攻城狮的加分技能,而是一个必备技能 Netty 底层实现就是基于我们的NIO,因为网络编程使用NIO非常复杂,容易写出Bub,netty封装了nio,大大的简化了学习成本与提高了编码效率。概述NIO主要有三大核心部分:Channel(通道),Buffer(缓冲区), Selector。传统IO基于字节流...原创 2022-01-24 11:33:37 · 340 阅读 · 0 评论 -
「RocketMQ专题」@RocketMQMessageListener selectorExpression属性不支持EL表达式 tag不生效 问题发现及解决方案
@RocketMQMessageListener selectorExpression属性不支持EL表达式 tag不生效 问题发现及解决方案原创 2022-01-13 12:31:40 · 9738 阅读 · 3 评论 -
windows、win10下docker打包springboot项目并发布运行
首先新建一个springboot项目,新建一个测试接口用maven打包的方式把项目打成jar包[INFO] BUILD SUCCESS把打包的jar包放到单独的目录下,新建txt文件,并把.txt后缀删除,编辑该文件,文件内容如下FROM java:8VOLUME /tmpADD demo-0.0.1-SNAPSHOT.jar /hello.jarENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar",原创 2020-11-13 13:41:29 · 1100 阅读 · 0 评论 -
windows Docker (error getsockopt: connection refused ,使用http无法使用 docker login 登录的问题)
windows 下修改要推的地址原创 2021-07-28 15:49:39 · 455 阅读 · 0 评论 -
「分布式专题」docker+shell脚本 快速部署项目
shell脚本 本质是一个文件,文件里面存放的是 特定格式的指令,系统可以使用脚本解析器 翻译或解析 指令 并执行(它不需要编译)shell 既是应用程序 又是一种脚本语言(应用程序 解析 脚本语言)shell命令解析器:系统提供 shell命令解析器: sh ash bashshell:大体含义就是把多个命令放到一起执行。docker部署项目常用套路pull project last stopcontainer rmcontainer run last images例...原创 2021-12-17 13:03:05 · 1856 阅读 · 0 评论 -
rancher配置host
点击升级右下角点击高级主机别名 (/etc/hosts 记录)原创 2021-11-15 15:16:19 · 1367 阅读 · 0 评论 -
布隆过滤器应用场景 : 搜索框恶意搜索 缓存穿透等
布隆过滤器的概念这里就不赘述了参考链接如何在海量元素中(例如 10 亿无序、不定长、不重复)快速判断一个元素是否存在?很简单嘛, 把所有的数据都添加到数据结构里去, 如list或map等, get判断不就完了嘛. emmm... 面试官可能会问这么简单的问题吗?数据量小的话, 完全可以的, 那么上亿上百亿呢?引入一个节省空间的数据结构:位图,他是一个有序的数组,只有两个值,0 和 1。0代表不存在,1代表存在。如何确定某一元素在哪个位置是0还是1,怎么解决这个问题呢,那就要用到..原创 2021-03-03 10:50:50 · 305 阅读 · 0 评论 -
Springboot使用@Cacheable 更优雅的使用缓存 以及如何设置失效时间
从注解的名字就可以看出该注解是一个缓存相关的注解, 在不引入分布式缓存(redis等)的前提下, spring 会默认提供一个缓存(本地缓存)提供使用.原创 2021-06-19 17:01:55 · 6514 阅读 · 1 评论 -
springboot整合redis,redis存储数据乱码
首先我们写一个测试类,简单模拟一下项目当中的乱码情况@SpringBootTest@RunWith(SpringRunner.class)public class RedisTest { @Resource private RedisTemplate redisTemplate; @Test public void test() { redisTemplate.opsForValue().set("test:1", "1233");原创 2020-11-10 20:08:32 · 804 阅读 · 0 评论 -
什么是redis,springboot整合redis,redis的基本使用
什么是RedisRedis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。Redis全称为:RemoteDictionaryServer(远程数据服务),该软件使用C语言编写,Redis是一个key-value存储系统,它支持丰富的数据类型,如:string、list、set、zset(sorted set)、hash。Redis特点Redis以内存作为数据存储介质,所以读写数据的效率极高,远远超过数据库。以设置和获取一个256...原创 2020-11-10 09:56:56 · 369 阅读 · 2 评论 -
Redis的五种存储类型和其应用场景 Redis常用方法大全
String:存储简单的字符串,k v形式 list::存储集合数据 hash :存储对象 set:不重复的元素 zSet:不重复有序(根据元素得分排序)的数据 // String 字符串 普通的k v ValueOperations<String, Object> string = redisTemplate.opsForValue(); string.set("test:string:one", "dugt is handso..原创 2021-03-30 12:16:06 · 805 阅读 · 3 评论 -
Redis使用注意点 Redis基本使用
看到一篇关于redis的文章讲的挺详细,记录一下分享给大家原文链接转载 2021-03-23 13:04:49 · 78 阅读 · 0 评论 -
redisTemplate开启事务支持
直接上代码redisTemplate.execute(new SessionCallback<Object>() { @Override public Object execute(RedisOperations operations) throws DataAccessException { operations.multi(); // 标记事务块的开始 operations.原创 2021-02-22 10:25:34 · 1176 阅读 · 1 评论 -
springboot整合redis实现发布订阅
虽然redis也能实现发布订阅, 但术业有专攻, 发布订阅还是要使用mq中间件!虽然redis实现了发布订阅(publish/subscribe)的功能,但是在通常的情况下是不推荐使用的,如果想使用消息队列这种功能,最好还是使用专业的各种MQ中间件,例如rabbitMQ,rockedMQ,activitedMQ等,本文主要讲一下不推荐使用redis的发布订阅功能的原因 第一个原因是和redis系统的稳定性有关。对于旧版的redis来说,如果一个客户端订阅了某个或者某些频道,但是它读取消...原创 2021-07-10 10:24:52 · 1566 阅读 · 0 评论 -
redis过期策略,内存淘汰机制,高并发和高可用,持久化方式,缓存雪崩等
redis中有哪些过期策略定期删除 + 惰性删除定期删除:是指redis默认每100ms就随机检查设置了过期时间的key,如果过期就删除。假设redis中有10w条key设置了过期时间,每隔几百毫秒就检查这10w个key,cpu负载太高了,redis可能就会挂掉。实际上是随机抽取这10w个中的某些key进行检查删除。 惰性删除:若这10w条数据中有的过期了,而没被redis删除,那么当下次获取这个key的时候,redis会先检查这个key是否过期,若过期就删除该key,返回null当要过期原创 2021-03-07 13:14:22 · 407 阅读 · 2 评论 -
订单超时未支付 redis处理未支付订单 redis监听失效的key
应用场景 (举一个商城项目的栗子)提交订单后, 把订单保存到表后, 也把订单的id放到redis中, 失效时间30分钟, 若30分钟内未付款, 则添加库存, 修改订单状态等等业务逻辑注入 RedisMessageListenerContainer @Bean public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) { RedisMessa.原创 2021-06-23 10:53:32 · 889 阅读 · 2 评论 -
「分布式专题」分布式系统中一致性hash算法
近年来B2C、O2O等商业概念的提出和移动端的发展,使得分布式系统流行了起来。分布式系统相对于单系统,解决了流量大、系统高可用和高容错等问题。功能强大也意味着实现起来需要更多技术的支持。例如系统访问层的负载均衡,缓存层的多实例主从复制备份,数据层的分库分表等我们以负载均衡为例,常见的负载均衡方法有很多,但是它们的优缺点也都很明显:随机访问策略。系统随机访问,缺点:可能造成服务器负载压力不均衡,俗话讲就是撑的撑死,饿的饿死。 轮询策略。请求均匀分配,如果服务器有性能差异,则无法...原创 2021-12-31 11:13:16 · 377 阅读 · 3 评论 -
「分布式专题」RocketMQ 发送事务消息 事务消息的执行流程(代码演示)
本地方法发送消息至borker borker 执行TransactionListener的方法。执行本地事务executeLocalTransaction 如果返回unkow状态,borker会回调checkLocalTransaction检查事务的结果,返回提交还是回滚 borker设置消息对外可见,等待消费或主动推送事务的流程如下图简述实例代码 /** * 基础事务消息 * 自己实现回调方法 * * @return Transa..原创 2021-12-09 13:56:23 · 2742 阅读 · 1 评论 -
微服务项目搭建
接下来的时间, 我会利用空闲时间敲一个二手商城项目,小程序方向,主要为了熟悉一下微服务项目的流程,包括前期的项目设计与项目发布主要技术栈:springboot、springCloud、redis、rabbitmq、mysql、nginx、vue+elementui、微信小程序。。。夫依赖<parent> <groupId>org.springframework.boot</groupId> <artifactId&g.原创 2021-07-13 22:13:58 · 264 阅读 · 1 评论 -
高并发处理之限流方案 RateLimiter以及阿里Sentinel
在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流缓存 缓存的目的是提升系统访问速度和增大系统处理容量 (本地, redis) 降级 降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高峰或者问题解决后再打开 (hystrix) 限流 限流的目的是通过对并发访问/请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理 (令牌桶算法)令牌桶酸防简介令牌桶算法原理如下:用户请求必须拿到令牌才代表消...原创 2021-07-09 16:54:34 · 1516 阅读 · 0 评论 -
聊聊RabbitMQ RabbitMQ相关面试题
目录为什么要使用消息队列消息队列的缺点各大消息队列的优缺点如何保证RabbitMQ的高可用如何保证消息的幂等性如何保证消息不被丢失如何保证消息的顺序性为什么要使用消息队列目前我所在的公司是一家电商医药,是一款电商小程序,我们订单的模块就用到了RabbitMQ,那为什么我们要使用RabbitMQ呢?无需担心订单接口是否异常,用户下订单直接把订单发送到消息队列去,返回下单成功,订单接口订阅消息队列,消费消息,保存订单~ 解耦:多个系统(B,C,...原创 2021-03-06 16:19:58 · 445 阅读 · 0 评论 -
rabbitmq 解决重复消费 保证消息的幂等性
很简单, 我们在生产者生产消息的时候, 都要给消息加一个messageId作为消息的唯一值, 就是为了消费方避免重复消费 String messageId = (String) map.get("messageId"); boolean exist = MESSAGE_ID_LIST.contains(messageId); if (exist) { redisUtils.set(messageId, order); .原创 2021-01-22 13:47:43 · 688 阅读 · 0 评论 -
redis实现分布式锁问题
现在的多数电商公司都会采用分布式架构,分布式部署,如下单,简单的描述拿订单秒杀模块举例,通常我们实现秒杀会采用redis缓存技术,活动举行前把相应的库存数存储到redis里边由图看以看出,在高并发的场景下,很容易造成库存的不一致问题。传统的锁像 synchronized 在此场景下就会失效。此时,我们需要一把锁,在多个线程下都能上锁。思考:redis的 setnx方法:redis执行setnx 添加数据时,若redis中存在相同的key,那么redis中的数据不会发生变化。 re原创 2020-12-20 09:03:28 · 1083 阅读 · 2 评论 -
rabbitmq进阶:回调函数之确认(confirm)模式、回退(return)模式
一、确认(confirm)模式运用场景当生产方发送消息至交换机后的处理逻辑包括发送成功或者失败废话不多说,直接上代码开启确认模式spring: rabbitmq: host: localhost port: 5672 username: guest password: guest virtual-host: / listener: simple: acknowledge-mode: manual # 消费者原创 2020-12-08 15:02:28 · 3979 阅读 · 3 评论 -
什么是rabbitmq?我们为什么要使用rabbitmq?
什么是rabbitmq?我们为什么要使用rabbitmq?原创 2020-11-30 10:32:29 · 1451 阅读 · 0 评论 -
rabbitmq 消息确认机制ACK
概述在使用RabbitMQ的时候,我们可以通过消息持久化操作来解决因为服务器的异常奔溃导致的消息丢失,除此之外我们还会遇到一个问题,当消息的发布者在将消息发送出去之后,消息到底有没有正确到达broker代理服务器呢?如果不进行特殊配置的话,默认情况下发布操作是不会返回任何信息给生产者的,也就是默认情况下我们的生产者是不知道消息有没有正确到达broker的,如果在消息到达broker之前已经丢失的话,持久化操作也解决不了这个问题,因为消息根本就没到达代理服务器,你怎么进行持久化,那么这个问题该怎么解决呢?原创 2020-12-03 13:41:55 · 1059 阅读 · 0 评论