Heron_社区达人页

个人头像照片
Heron
已加入开发者社区2023

勋章 更多

个人头像照片
专家博主
专家博主
个人头像照片
星级博主
星级博主
个人头像照片
技术博主
技术博主
个人头像照片
初入江湖
初入江湖

成就

已发布82篇文章
0条评论
已回答0个问题
0条评论
已发布0个视频
github地址

技术能力

兴趣领域
  • Java
  • JavaScript
  • 开发工具
  • 项目管理
  • 数据库
  • 关系型数据库
擅长领域
技术认证

暂时未有相关云产品技术能力~

遨游在技术的海洋,学无止境!书山有路勤为径,学海无涯苦作舟

暂无精选文章
暂无更多信息

2023年07月

  • 07.31 17:24:59
    发表了文章 2023-07-31 17:24:59

    RocketMQ极简入门-在SpringBoot中使用RocketMQ

    现在开发项目都是基于SpringBoot,新项目很少使用Spring,所以我们学习一门技术除了要会原生API,还不得不考虑和SpringBoot集成,本篇文章为SpirngBoot整合RocketMQ案例
  • 07.31 17:17:10
    发表了文章 2023-07-31 17:17:10

    RocketMQ极简入门-RocketMQ事务消息

    如果业务只涉及到一个数据库的写操作,我们只需要保证这一个事物的提交和回滚,这种事务管理叫传统事物或本地事务,如果业务涉及到多个数据库(多个服务)的写操作,我们需要保证多个数据库同时提交或回滚,这种夸多个数据库的事务操作叫分布式事务。 分布式事物的解决方案有很多,如:2PC,TCC,最终一致性,最大努力通知等等。这里要介绍的是基于RocketMQ事务消息的最终一致性方案
  • 07.31 17:09:57
    发表了文章 2023-07-31 17:09:57

    RocketMQ极简入门-RocketMQ消息批量发送

    批量发送消息能显著提高传递小消息的性能。限制是这些批量消息应该有相同的topic,而且不能是延时消息。此外,这一批消息的总大小不应超过4MB,如果超过可以有2种处理方案: 1.将消息进行切割成多个小于4M的内容进行发送 2.修改4M的限制改成更大 可以设置Producer的maxMessageSize属性 修改配置文件中的maxMessageSize属性
  • 07.31 17:07:57
    发表了文章 2023-07-31 17:07:57

    RocketMQ极简入门-RocketMQ延迟消息

    我们通常使用定时任务比如Quartz来解决超时业务,比如:订单支付超时关单,VIP会员超时提醒。但是使用定时任务来处理这些业务场景在数据量大的时候并不是一个很好的选择,会造成大量的空扫描浪费性能。我们可以考虑使用延迟消息来解决。
  • 07.31 17:06:01
    发表了文章 2023-07-31 17:06:01

    RocketMQ极简入门-RocketMQ顺序消息发送

    在某些业务场景下是需要消息按照顺序进行消费,比如一个账户的加钱,减钱的动作必须按照时间先后去执行,否则就会发生金额不够导致操作失败。 顺序消息故名知意就是消息按照发送的顺序进行消费,队列本身是一种先进先出的数据结构,而RocketMQ理论上说也遵循这种机制。但是默认生产者以Round Robin轮询方式把消息发送到不同的Queue分区队列;消费者从多个队列中消费消息,这种情况没法保证顺序。所以在RocketMQ中如何保证消息顺序呢?
  • 07.31 16:59:25
    发表了文章 2023-07-31 16:59:25

    RocketMQ极简入门-RocketMQ普通消息发送

    RocketMQ已经写了两章了,一章是RocketMQ认识和安装,一章是RocketMQ的工作流程和核心概念,本章我们开始使用RocketMQ来发送和接收消息。RocketMQ的消息种类非常多,比如:普通消息,顺序消息,延迟消息,批量发送,消息过滤等等。本篇文章来探讨一下 普通消息的发送
  • 07.31 16:54:23
    发表了文章 2023-07-31 16:54:23

    RocketMQ极简入门-RocketMQ的工作原理

    RocketMQ架构上主要分为四部分,如上图所示 Producer 消息发布的角色,支持分布式集群方式部署。Producer通过MQ的负载均衡模块选择相应的Broker集 群队列进行消息投递,投递的过程支持快速失败并且低延迟。 Consumer 消息消费的角色,支持分布式集群方式部署。支持以push推,pull拉两种模式对消息进行消费。同时 也支持集群方式和广播方式的消费,它提供实时消息订阅机制,可以满足大多数用户的需求。 Broker Broker主要负责消息的存储、投递和查询以及服务高可用保证。 NameServer NameServer是一个Broker与Topic路由的注册中心
  • 07.31 16:53:17
    发表了文章 2023-07-31 16:53:17

    RocketMQ极简入门-MQ概述&RocketMQ安装

    1.MQ是什么 MQ全称为Message Queue,即消息队列 ,是一种提供消息队列服务的中间件,也称为消息中间件,是一套提供了消息生 产、存储、消费全过程的软件系统,遵循FIFO原则。在高并发的分布式系统中使用居多。
  • 07.31 16:51:54
    发表了文章 2023-07-31 16:51:54

    Netty入门到超神系列-BIO、NIO、AIO的认识

    I/O概述 I/O其实是Input,Output的缩写,意思是输入和输出,比如:把磁盘中的一个文件读入Java内存中,站在Java内存的角度来看就是输入即input, 可以使用Java提供的输入流如:InputStream#read 来实现。如果是把一个段文本内容从Java内存中保存到磁盘上的某个文件,站在Java内存的角度来说就是输出,可以使用Java提供的输出流:OutputStream#write() 来实现。再比如把一个数据通过网络发送给其他服务器就是输出,或者从其他服务器接收一段数据就是输入。 I/O也是有很多种的,比如Java支持三种:BIO,NIO,AIO
  • 07.31 16:51:03
    发表了文章 2023-07-31 16:51:03

    Netty入门到超神系列-Java NIO 三大核心(selector,channel,buffer)

    选择器,也叫多路复用器,Java的NIO通过selector实现一个线程处理多个客户端链接,多个channel可以注册到同一个Selector,Selector能够监测到channel上是否有读/写事件发生,从而获取事件和对事件进行处理,所以Selector切到哪个channel是由事件决定的。当线程从某个客户端通道未读取到数据时,可以把空闲时间用来做其他任务,性能得到了提升。
  • 07.31 16:48:47
    发表了文章 2023-07-31 16:48:47

    Netty入门到超神系列-Java NIO 三大核心(selector,channel,buffer)

    理解Selector 和 Channel Selector 选择器,也叫多路复用器,可以同时处理多个客户端连接,多路复用器采用轮询机制来选择有读写事件的客户端链接进行处理。 通过 Selector ,一个 I/O 线程可以并发处理 N 个客户端连接和读写操作,这解决了传统同步阻塞 I/O 一连接一线程模型,架构的性能、弹性伸缩能力和可靠性都得到了极大的提升。 由于它的读写操作都是非阻塞的,这就可以充分提升 IO 线程的运行效率,避免由于频繁 I/O 阻塞导致的线程挂起。
  • 07.31 16:47:29
    发表了文章 2023-07-31 16:47:29

    Netty入门到超神系列-聊天室案例

    对于服务端而言需要做如下事情 selector监听客户端的链接 如果有“读”事件,就从通道读取数据 把数据转发给其他所有的客户端,要过滤掉发消息过来的客户端不用转发 对于客户端而言需要做如下事情 selector监听服务端的“读”事件 如果有数据从通道中读取数据,打印到控制台 监听键盘输入,向服务端发送消息
  • 07.31 16:46:15
    发表了文章 2023-07-31 16:46:15

    Netty入门到超神系列-零拷贝技术

    内存主要作用是在计算机运行时为操作系统和各种程序提供临时储存,操作系统的进程和进程之间是共享CPU和内存资源的。为了防止内存泄露需要一套完善且高效的内存管理机制。因此现代操作系提供了一种基于主内存抽象出来的概念:虚拟内存(Virtual Memory)。 虚拟内存 虚拟内存是计算机系统内存管理的一种技术,主要为每个进程提供私有的地址空间,让每个进程拥有一片连续完整的内存空间。而实际上,虚拟内存通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换,加载到物理内存中来 物理内存 物理内存指通过内存条而获得的内存空间,而虚拟内存则是指将硬盘的一块区域划分来
  • 07.31 16:45:00
    发表了文章 2023-07-31 16:45:00

    Netty入门到超神系列-Java NIO零拷贝实战

    这一章我们来操作一下NIO的零拷贝,这里我会先写代码样式一下传统IO数据拷贝场景下的耗时,然后再对比NIO场景下的考别耗时,通过耗时差异就能看到NIO零拷贝和传统IO拷贝的区别了。
  • 07.31 16:43:22
    发表了文章 2023-07-31 16:43:22

    Netty入门到超神系列-Netty介绍和线程模型

    经过前面章节的学习你应该能感受到NIO的问题,就是类比较多,方法也比较多,而且复杂,开发工作量和难度都非常大,还需要考虑网络问题、数据丢包和异常流的处理等等。 NIO是底层API,它的实现依赖于操作系统针对IO操作的APIs,使用NIO会经常发现代码在Linux上正常运行,但在Windows上就会出现问题。JDK的NIO还有一个Epoll Bug,它会导致 Selector 空轮询,最终导致 CPU 100%。 总之直接使用Java NIO会面临一系列的问题,Netty的其出现就是为了解决NIO的不足
  • 07.31 16:42:13
    发表了文章 2023-07-31 16:42:13

    Netty入门到超神系列-Netty入门&核心类

    我们需要有GoosGroup来循环监听请求事件,需要有WorkGroup来处理事件,而这两个角色都通过来就NioEventLoopGroup来进行事件监听,我们还需要创建事件处理器ChannelHandler,通过 Channel的ChannelPipeline把ChannelHandler进行关联。
  • 07.31 16:40:26
    发表了文章 2023-07-31 16:40:26

    Netty入门到超神系列-Netty开发Http服务器

    这章我们使用Netty来写一个Http服务器类似于Tomcat ,当然Netty和Tomcat是有很多的异同的,比如通信协议,Tomcat是一个基于Http协议的Web容器,而Netty能够通过codec自己来编码/解码字节流 ,因此Netty可以通过编程自定义各种协议,我们今天的目的还是对Netty练练手。
  • 07.31 16:35:04
    发表了文章 2023-07-31 16:35:04

    Netty入门到超神系列-手撸简单版RPC框架(仿Dubbo)

    原理还是比较简单 : 代理 + 线程池 + Netty 下面做一些解释: 首先需要定义一个统一的API接口,例:UserApi , 服务端(provider)需要实现这个接口,提供相应的方法UserApiImpl#save,客户端通过远程来调用该接口。 然后需要约定一个协议,服务器如何才能识别到客户端要调用哪个接口?:我这里用 “接口权限定名#方法名#参数” ,的方式来,因为是一个简单版本的RPC。服务端解析该内容就能匹配对应的接口的实现类,然后调用该方法。并把方法的返回值通过Netty写回给客户端 使用的编解码器都是比价简单的String的编解码器
  • 07.31 16:32:50
    发表了文章 2023-07-31 16:32:50

    Netty入门到超神系列-TCP粘包拆包处理

    TCP是面向连接的,服务端和客户端通过socket进行数据传输,发送端为了更有效的发送数据,通常会使用Nagle算法把多个数据块合并成一个大的数据块,这样做虽然提高了效率,但是接收端就很难识别完整的数据包了(TCP无消息保护边界),可能会出现粘包拆包的问题。
  • 07.31 16:30:05
    发表了文章 2023-07-31 16:30:05

    Netty入门到超神系列-Netty使用Protobuf编码解码

    当我们的Netty客户端和服务端进行通信时数据在传输的过程中需要进行序列化,比如以二进制数据进行传输,那么我们的业务数据就需要有相应的编码器进行编码为二进制数据,当服务端拿到二进制数据后需要有相应的解码器进行解码得到真实的业务数据。
  • 07.31 16:28:04
    发表了文章 2023-07-31 16:28:04

    Netty入门到超神系列-基于WebSocket开发聊天室

    在很多的网站中都嵌入有聊天功能,最理想的方式就是使用WebSocket来开发,屏幕面前的你如果不清楚WebSocket的作用可以自己去百度一下,Netty提供了WebSocket支持,这篇文章将使用Netty作为服务器,使用WebSocket开发一个简易的聊天室系统。
  • 07.29 19:45:10
    发表了文章 2023-07-29 19:45:10
  • 07.29 19:42:04
    发表了文章 2023-07-29 19:42:04
  • 07.29 19:40:20
    发表了文章 2023-07-29 19:40:20
  • 07.29 19:38:11
    发表了文章 2023-07-29 19:38:11

    【java面试题】- 为什么重写 equals() 时必须重写 hashCode() 方法?

    为什么重写 equals() 时必须重写 hashCode() 方法?
  • 07.29 19:35:43
    发表了文章 2023-07-29 19:35:43

    【java面试题】- java深拷贝和浅拷贝区别?什么是引用拷贝?

    java深拷贝和浅拷贝区别?什么是引用拷贝?
  • 07.29 19:31:45
    发表了文章 2023-07-29 19:31:45

    【java面试题】- java接口和抽象类共同点和区别?

    java接口和抽象类共同点和区别?
  • 07.29 19:27:51
    发表了文章 2023-07-29 19:27:51

    【java面试题】- 面向对象三大特征

    面向对象三大特征:封装、继承、多态
  • 07.29 19:25:20
    发表了文章 2023-07-29 19:25:20

    【java面试题】- 基本类型和包装类型的区别?

    基本类型和包装类型的区别?
  • 07.29 19:23:23
    发表了文章 2023-07-29 19:23:23
  • 07.29 19:21:32
    发表了文章 2023-07-29 19:21:32

    java成员变量与局部变量的区别?

    java成员变量与局部变量的区别?
  • 07.29 19:19:47
    发表了文章 2023-07-29 19:19:47

    Oracle JDK 和 OpenJDK的区别

    Oracle JDK vs OpenJDK
  • 07.29 19:17:39
    发表了文章 2023-07-29 19:17:39

    JDK8新特性

    1.Lambda 表达式:Lambda 表达式提供了一种简洁的方式来表示Java中的匿名函数。它们允许您将功能作为方法参数或将代码作为数据处理。这个特性改善了代码的可读性,并使得在Java中可以进行函数式编程。
  • 07.29 19:11:21
    发表了文章 2023-07-29 19:11:21

    Mysql5.7.41_windows64位安装_卸载

    mysql5.7 windows安装
  • 07.29 19:09:28
    发表了文章 2023-07-29 19:09:28

    Resp&Redis可视化工具安装

    Resp&Redis可视化工具安装
  • 07.29 19:05:26
    发表了文章 2023-07-29 19:05:26

    SpringCloudAlibaba极简入门-Gateway网关整合Nacos

    Zuul是Netflix的开源项目,Spring Cloud将其收纳成为自己的一个子组件。zuul用的是多线程阻塞模型,它本质上就是一个同步 Servlet,这样的模型比较简单,他都问题是多线程之间上下文切换是有开销的,线程越多开销就越大。线程池数量固定意味着能力接受的请求数固定,当后台请求变慢,面对大量的请求,线程池中的线程容易被耗尽,后续的请求会被拒绝。 在Zuul 2.0中它采用了 Netty 实现异步非阻塞编程模型,异步非阻塞模式对线程的消耗比较少,对线程上线文切换的消耗也比较小,并且可以接受更多的请求。它的问题就是线程模型比较复杂,要求深究底层原理需要花一些功夫。
  • 07.29 19:03:26
    发表了文章 2023-07-29 19:03:26

    SpringCloud源码剖析-Zuul使用Ribbon负载均衡-RibbonRoutingFilter

    RibbonCommandContext 在run方法中构建了一个 RibbonCommandContext Ribbon的上下文对象,然后调用 forward 方法转发请求 ,通过 setResponse方法设置结果
  • 07.29 18:38:22
    发表了文章 2023-07-29 18:38:22

    SpringCloud源码剖析-Zuul的执行流程

    Zuul的执行流程是这样的 首先请求进来会先到达ZuulController ,ZuulController把请求交给ZuulServlet去处理 在ZuulServelt会调用 ZuulRunner 依次执行: init初始化,pre前置filter,route路由filter,post后置filter, error 异常filter ZuulRunner通过 FilterProcessor 去执行各种Filter,FilterProcessor通过 FilterLoader 加载 各种filters 执行完成之后,把结果响应给客户端
  • 07.29 18:35:41
    发表了文章 2023-07-29 18:35:41

    SpringCloud源码剖析-Zuul的自动配置和核心Filter详解

    EnableZuulProxy的注释告诉我们,这里设设置Zuul服务器端点,和安装了一些反向代理过滤器,通过这些过滤器它可以转发请求到后端服务器,可以通过配置或通过DiscoveryClient手动注册后端服务(服务发现)
  • 07.29 18:28:36
    发表了文章 2023-07-29 18:28:36

    SpringCloud源码剖析-Zuul的核心Filter

    zuul的执行流程 Zuul是服务网关,是微服务的访问入口和出口,它的核心工作思想是:根据客户端的请求URL,通过路由映射到相应的微服务,然后通过服务发现的方式结合Ribbon实现对下游微服务的负载均衡 。Zuul通过大量的Filters实现上述功能,在zuul底层通过ZuulServlet定义整个请求的流程,请求会调用经过pre前置过滤器,route路由过滤器,post后置过滤器,然后返回响应结果,下面是一张摘抄于SpringCloud官网的zuul的生命周期图
  • 07.29 18:04:38
    发表了文章 2023-07-29 18:04:38

    java生成excel表格,并将excel表格加密压缩

    POI提供了一些API,可以是java程序对Microsoft Office的读和写; zip4j提供非常友好的zip加密压缩; 某电商平台,需要把供应商销售数据导出为excel表单,为了安全加密为zip压缩包,方便发给供应商对账。
  • 07.29 17:57:14
    发表了文章 2023-07-29 17:57:14

    SpringCloud源码剖析-Eureka Server服务下线

    1.从registry中移除服务, 2.从overriddenInstanceStatusMap状态map中移除服务状态 3.添加到最近取消队列 4.调用Lease.cancel方法,将租约对象中的逐出时间修改为当前时间 5.修改服务的InstanceInfo的状态为DELETE 6.添加到最近修改队列 7.更新服务最后修改时间 8.使ReponseCache缓存无
  • 07.29 17:55:10
    发表了文章 2023-07-29 17:55:10

    SpringCloud源码剖析-Eureka Server服务剔除

    1.从registry中移除服务, 2.从overriddenInstanceStatusMap状态map中移除服务状态 3.添加到最近取消队列 4.调用Lease.cancel方法,将租约对象中的逐出时间修改为当前时间 5.修改服务的InstanceInfo的状态为DELETE 6.添加到最近修改队列 7.更新服务最后修改时间 8.使ReponseCache缓存无效
  • 07.29 17:52:00
    发表了文章 2023-07-29 17:52:00

    SpringCloud源码剖析-Eureka Server服务注册表拉取

    Eureka Server 拉取服务注册表的逻辑还是比较简单的,不管是全量拉取,还是差别拉取都是通过ApplicationsResource中处理,然后构建出不同的key,从ResponseCache中去获取服务。
  • 07.29 17:49:33
    发表了文章 2023-07-29 17:49:33

    SpringCloud源码剖析-Eureka Server服务续约

    Eureka客户端定时向服务端发起服务续约的请求,也是通过ServeltContainer来接待请求,请求中携带了当前续约服务的状态和最后修改时间,ServeltContainer最终会调用 InstanceResource来处理请求,
  • 07.29 17:46:35
    发表了文章 2023-07-29 17:46:35

    SpringCloud源码剖析-Eureka Server服务注册流程

    ApplicationResource.addInstance看方法名就能推测出他是用来注册实例的方法,其中参数InstanceInfo 是客户端提交的注册信息,请求头中isReplicationd为true代表是从其他Eureka Server节点复制实例,如果是isReplication为false,代表是Eureka Client 注册的 在做了一些列参数判断之后,这里在调用PeerAwareInstanceRegistry的register注册服务,使用的是实现类:InstanceRegistry,这个类在之前有介绍过,就是Eureak Server用来实现服务注册,服务发现,服务续
  • 07.29 17:42:25
    发表了文章 2023-07-29 17:42:25

    SpringCloud源码剖析-Eureka Server初始化流程

    Eureka服务端上下文对象,包含了初始化,关闭,获取服务配置,获取集群节点,获取服务注册器,获取服务信息管理器等方法,默认实现类是DefaultEurekaServerContext
  • 07.29 17:13:45
    发表了文章 2023-07-29 17:13:45

    SpringCloud源码剖析-Eureka Server的自动配置

    这里和EureakClientAutoConfiguration差不多,都是由主启动类上的@SpringBootApplication标签中的@EnableAutoConfiguration启动自动配置,通过AutoConfigurationImportSelector来扫描classpath下的starter包中的自动配置类
  • 07.29 17:09:00
    发表了文章 2023-07-29 17:09:00

    SpringCloud源码剖析-Eureka Client取消注册

    取消注册(服务下线)指的是EureakClient正常关闭之前,微服务会主动向EurekaServer发送下线请求,EureakServer接收到请求从注册表中剔除下线的服务 DiscoveryClient.shutdown 方法 DiscoveryClient是服务发现最核心的实现,DiscoveryClient通过shutdown 方法取消服务注册,方法上通过@PreDestroy标记该方法是实例的销毁方法,当应用关闭,容器正常关闭,Bean的销毁方法执行,
  • 发表了文章 2023-07-31

    RocketMQ极简入门-在SpringBoot中使用RocketMQ

  • 发表了文章 2023-07-31

    RocketMQ极简入门-RocketMQ事务消息

  • 发表了文章 2023-07-31

    RocketMQ极简入门-RocketMQ消息批量发送

  • 发表了文章 2023-07-31

    RocketMQ极简入门-RocketMQ延迟消息

  • 发表了文章 2023-07-31

    RocketMQ极简入门-RocketMQ顺序消息发送

  • 发表了文章 2023-07-31

    RocketMQ极简入门-RocketMQ普通消息发送

  • 发表了文章 2023-07-31

    RocketMQ极简入门-RocketMQ的工作原理

  • 发表了文章 2023-07-31

    RocketMQ极简入门-MQ概述&RocketMQ安装

  • 发表了文章 2023-07-31

    Netty入门到超神系列-BIO、NIO、AIO的认识

  • 发表了文章 2023-07-31

    Netty入门到超神系列-Java NIO 三大核心(selector,channel,buffer)

  • 发表了文章 2023-07-31

    Netty入门到超神系列-Java NIO 三大核心(selector,channel,buffer)

  • 发表了文章 2023-07-31

    Netty入门到超神系列-聊天室案例

  • 发表了文章 2023-07-31

    Netty入门到超神系列-零拷贝技术

  • 发表了文章 2023-07-31

    Netty入门到超神系列-Java NIO零拷贝实战

  • 发表了文章 2023-07-31

    Netty入门到超神系列-Netty介绍和线程模型

  • 发表了文章 2023-07-31

    Netty入门到超神系列-Netty入门&核心类

  • 发表了文章 2023-07-31

    Netty入门到超神系列-Netty开发Http服务器

  • 发表了文章 2023-07-31

    Netty入门到超神系列-手撸简单版RPC框架(仿Dubbo)

  • 发表了文章 2023-07-31

    Netty入门到超神系列-TCP粘包拆包处理

  • 发表了文章 2023-07-31

    Netty入门到超神系列-Netty使用Protobuf编码解码

正在加载, 请稍后...
滑动查看更多
正在加载, 请稍后...
暂无更多信息
正在加载, 请稍后...
暂无更多信息