Failed to execute goal ...:compile (default-compile)无效的目标发行版: 17 Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project FtxServer: Fatal error compiling: 无效的目标发行版: 17 -> [Help 1]
通过两种方式手写一个消息队列 文章目录1.基于多线程的方式实现MQ(极简纯享版)2.基于网络通讯的方式实现MQ参考每特教育蚂蚁课堂1.基于多线程的方式实现MQ(极简纯享版)MQ就是在消费者服务和生产者服务传递信息的通道,生产者向队列中投递消息,然后消费者过来取。所以我们可以这样设计,用一个队列作为中间件,然后开启两个线程,一个是生产者线程,一个是消费者线程,生产者线程向队列中插入json串,消费者线程过来取这个就是一个简单的MQ的实现。 private static LinkedBlockingDeque<JSONO
万字简析Netty启动流程源码 文章目录前言0.NIO中服务器是如何启动的1.Netty启动流程2.initAndRegister方法2.1 init2.2 Register3.启动流程阶段性总结4. NioEventLoop分析4.1NioEventLoop的组成4.2 selector的创建4.3 两个selector成员变量5. NioEventLoop线程何时启动6. eventLoop wakeup 方法7. EventLoop进入select分支7.1讨论什么时候进入select方法7.2进入select方法7.3 Netty
Netty协议的设计与解析 文章目录1.协议的引入2. HTTP协议的编解码实现3. 自定义协议3.1自定义协议的要素3.2 自定义协议通过Netty进行编解码4. 啥时候用@Sharable参考黑马程序员1.协议的引入协议就是客户端向服务端发送消息的时候,双方约定俗成的一套规矩,比如我在redis中创建一个key,value。按理说要用到这个命令,set key value。这个命令在发送的时候会被解析成redis服务器能看懂的形式。比如说set name zhangsan你看到的只是一条命令,实际上向服务端发送的是这样的
Netty应用之粘包半包问题 文章目录1.粘包现象演示2.半包现象演示3.粘包半包现象分析3.1 粘包3.2 半包4.粘包半包解决方案4.1短连接4.2 定长解码器4.3 行解码器4.4 LengthFieldBasedFrameDecoder4.5 LengthFieldBasedFrameDecoder演示参考黑马程序员1.粘包现象演示我们通过一段代码演示一个这个粘包现象,首先我们来看服务端 void start() { NioEventLoopGroup boss = new NioEventLoop
SpringBoot整合RabbitMQ 文章目录1.简介2.准备工作2.1生产者2.2邮件消费者参考蚂蚁课堂1.简介我们的生产者向消息队列中投递消息,不用非得把他转化成json格式,可以直接投递对象,因为SpringBoot已经帮你实现了序列化,你投递的对象只要实现Seralized接口就行了。同时SpringBoot还可以帮你自动创建交换机,队列这些组件,你不用SpringBoot的话你不创建他就会报错。SpringBoot就相当于一个小女友,十分的贴心处处为你着想。2.准备工作我们大概要实现一个这样的效果,一个生产者,通过fano
消息队列(MQ)简介 1.引入——传统的Http请求的缺点Http请求是同步的,也就是说必须和服务端建立连接,当服务端接收的请求过大时,给客户端的响应就不够及时如下图所示每当客户端向tomcat服务器发送一个请求,tomcat服务器当中就会创建一个线程,而且这个线程不是无限的,有一个最大线程数。当我的请求数量大于这个最大线程数的时候,多余的请求就要缓存到队列里。这就有可能导致客户端长时间得不到响应。客户体验非常差。如果客户端一直等着没有收到服务端的响应的话那么可能引起超时重传,同一个请求传好几遍,有可能引发幂等性问题。2
RabbitMQ简介及简单使用 文章目录1.RabbitMQ基本介绍2.RabbitMQ简单使用案例2.1在RabbitMQ平台上创建一个队列2.2编写生产者代码2.3编写消费者代码3.RabbitMQ如何保证消息不丢失4.RabbitMQ工作队列5.RabbitMQ交换机(exchange)5.1RabbitMQ Fanout 发布订阅5.2 Direct交换机5.3 Topic主题模式6.MQ如何获取消费者消费结果7.rabbitmq死信队列7.1原理7.2演示7.3应用场景8.RabbitMQ重试策略与幂等性问题8.1重试8.2幂等
Netty简介 文章目录1.什么是Netty?2.一个简单地Netty程序3.Netty执行流程简析3.1服务端准备工作3.2客户端准备工作3.3交互过程4.一些概念的再明确5. EventLoop组件5.1 EventLoop用法5.1.1执行普通任务5.1.2 执行定时任务5.2 eventLoop分工细化5.3源码分析——不同工人之间如何交接6.Channel6.1 ChannelFuture6.1.1 sync()同步处理结果6.1.2 addListener异步处理结果6.1.3 close存在的问题7.在net
ThreadLocal底层原理 文章目录1.什么是ThreadLocal?2.ThreadLocal基本用法3.ThreadLocal的应用场景4.ThreadLocal底层原理5.强软弱引用之间的区别5.1强引用5.2软引用5.3弱引用5.4虚引用6.ThreadLocal内存泄漏问题7.如何防止ThreadLocal内存泄漏问题8.ThreadLocal采用的是弱引用9.ThreadLocal与Synchronized区别参考蚂蚁课堂1.什么是ThreadLocal?ThreadLocal提供了线程本地变量,它可以保证访问到的变
线程池常见的面试题 文章目录1.什么是线程池2.为什么使用线程池3.线程的作用4.如何创建线程池5.线程池底层是如何实现复用的6.手写一个简易线程池7.ThreadPoolExecutor构造函数原理8.线程池创建的线程会一直运行吗?9.线程池队列满了任务会丢失吗?参考蚂蚁课堂1.什么是线程池线程池和数据库连接池类似,可以统一管理维护线程,减少没有必要的开销,就是说你在需要启动线程的时候没有必要自己创建了,只需要从线程池拿就行了,如果用完了还回去就行了没必要创建一个新的,比如说我需要100个线程,我如果说直接创建100个
Zookeeper集群的数据一致性问题 1.Zookeeper不同节点的作用?首先介绍一下zk集群中的leader节点和follower节点都是干啥的。每个follower节点都保存了leader节点的副本数据,全局保证了数据一致性,分布式读写分开,写的请求统一交给Leader实现,Follower或者是ObServer节点主要实现读的操作。如果你连接的是Follower节点或者ObServer节点然后你还要写的话,他会把这个写的请求转发给Leader节点,然后leader节点写完之后同步给Follower或ObServer节点。2.ZAB原
zkObesever节点介绍 文章目录1.Zookeeper集群存在的问题2.Zookeeper节点类型3.在Zookeeper中配置ObServer节点参考蚂蚁课堂1.Zookeeper集群存在的问题假如说我现在有一个集群,里面原来有3个节点,1个Leader两个Follower,这个时候假如说Leader积劳成疾,死而后已,出师未捷身先死,那么这个团队需要一个新的领导者,这个领导者必须得从剩余的两个Follower里面选择。在假如说这个团队发展壮大了,有1个Leader和4个Follower,这个时候Leader英年早逝之后,
Zookeeper集群与分布式理论 文章目录1.分布式理论之强一致性概念2.分布式理论之最终一致性概念3. Zookeeper集群选举原理策略4.构建Zookeeper集群环境5.为什么zookeeper集群节点最好要是奇数参考蚂蚁课堂1.分布式理论之强一致性概念假如说有一个mysql集群,然后数据库表中有一个字段name。如图所示name原来的值都是张三,然后这个时候突然name被更改为李四。这个时候你查MySQL1一定会查到name值为李四,你查MySQL2,name值也为李四,这就是数据库强一致性。但是由于在数据同步的过程中网络
Zookeeper实现分布式锁 文章目录1.Zookeeper实现事件监听通知2.分布式锁的概念2.1分布式锁应用场景2.2实现方案2.3基于zookeeper实现分布式锁的思路2.3.1创建分布式锁的原理2.3.2释放锁的原理3. zk分布式锁的实现4.如何防止死锁问题参考蚂蚁课堂1.Zookeeper实现事件监听通知zookeeper可以实现对节点不同行为进行监听比如说之前payment-service下面有两个节点一个是8080一个是8081。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k9
Zookeeper作为服务注册中心 文章目录1.服务注册的简单介绍2.使用zookeeper注册服务3.服务发现4.Eureka与Zookeeper作为注册中心的区别参考蚂蚁课堂1.服务注册的简单介绍这个微服务之间的相互调用和上面的图类似,首先会有一个注册中心,生产者把自己的IP地址与端口号注册到注册中心上,然后消费者从注册中心获取生产者的IP地址和端口号,然后通过本地RPC远程调用生产者服务。如果我们用zookeeper实现服务注册的话那就是在zookeeper下面创建节点比如说/payment-service(服务名称),如果是
Zookeeper简介 文章目录1. Zookeeper的应用场景有哪些?2. Zookeeper用Java语言连接3.通过CountDownLatch优化上述代码4.zookeeper的四种节点类型5.ACL权限控制参考蚂蚁课堂1. Zookeeper的应用场景有哪些?Zookeeper 简称zk相当于分布式领域的协调者。主要应用场景:1.分布式锁2.Dubbo服务注册3.分布式配置中心4.分布式消息中间件5.发布订阅(事件通知)6.Master选举zookeeper类似于文件系统,zookeeper把文件定
手把手教你搭哨兵——哨兵的概念搭建原理解析 Redis哨兵机制实现原理1.Redis主从机制1.1主从复制的概念我们在实际应用中不可能只有一台redis服务器,因为如果这一台redis服务器宕机了,那么就可能导致redis不可用,同时还有可能发生数据丢失。所以这时候我们必须要有从redis做备份。Redis主机既能读又能写,而Redis的从机只能读不能写,当向Redis主机写入数据时必须将数据同步到Redis从服务器上,从而保证数据的一致性。这里要注意一下,保证数据一致性一定是弱一致性,不是强一致性。强一致性要求我向主机写入数据之后数据必须