- 博客(12)
- 资源 (5)
- 收藏
- 关注
原创 RocketMQ事务消息实战
我们以一个订单流转流程来举例,例如订单子系统创建订单,需要将订单数据下发到其他子系统(与第三方系统对接)这个场景,我们通常会将两个系统进行解耦,不直接使用服务调用的方式进行交互。其业务实现步骤通常为: 1、A系统创建订单并入库。 2、发送消息到MQ。 3、MQ消费者消费消息,发送远程RPC服务调用,完成订单数据的同步。 1、方案一 方案弊端: ...
2018-07-31 19:19:05 41500 25
原创 RocketMQ源码分析之事务消息实现原理下篇-消息服务器Broker提交回滚事务实现原理
本文将重点分析RocketMQ Broker如何处理事务消息提交、回滚命令,其核心实现就是根据commitlogOffset找到消息,如果是提交动作,就恢复原消息的主题与队列,再次存入commitlog文件进而转到消息消费队列,供消费者消费,然后将原预处理消息存入一个新的主题RMQ_SYS_TRANS_OP_HALF_TOPIC,代表该消息已被处理;回滚消息与提交事务消息不同的是,提交事务消...
2018-07-29 23:11:37 2798
原创 RocketMQ源码分析之RocketMQ事务消息实现原理中篇----事务消息状态回查
上节已经梳理了RocketMQ发送事务消息的流程(基于二阶段提交),本节将继续深入学习事务状态消息回查,我们知道,第一次提交到消息服务器,消息的主题被替换为RMQ_SYS_TRANS_HALF_TOPIC,当执行本地事务,如果返回本地事务状态为UN_KNOW时,第二次提交到服务器时将不会做任何操作,也就是消息还存在与RMQ_SYS_TRANS_HALF_TOPIC主题中,并不能被消息消费者消...
2018-07-29 21:33:51 5802 4
原创 RocketMQ源码分析之RocketMQ事务消息实现原理上篇
根据上节Demo示例,发送事务消息的入口为:TransactionMQProducer#sendMessageInTransaction:public TransactionSendResult sendMessageInTransaction(final Message msg, final Object arg) throws MQClientException { ...
2018-07-28 18:20:32 7551 2
原创 RocketMQ源码分析之从官方示例窥探RocketMQ事务消息实现基本思想
RocketMQ4.3.0版本开始支持事务消息,本节开始将剖析事务消息的实现原理,首先将从官方给出的Demo实例入手,以此通往RocketMQ事务消息的世界中。 官方版本未发布之前,从apache rocketmq第一个版本上线后,代码中存在者与事务消息相关的代码,例如COMMIT、ROLLBACK、PREPARED, 网上对于事务消息的“声音”基本上是使用类似二阶段提交,消息系统标...
2018-07-28 12:37:42 7632 7
原创 源码分析Dubbo网络通信篇NettyClient
在源码分析Dubbo通讯篇之网络核心类一文中已给出Dubbo netty client的启动流程,如下图: 以Dubbo协议为例,DubboProtocol#refer中,在创建Invoker时,通过getClient方法,开始Client(连接的)创建过程,先重点看一下:private ExchangeClient[] getClients(URL url) { ...
2018-07-25 19:32:03 2367
原创 源码分析Dubbo网络通信篇NettyServer、HeaderExchangeServer
本文主要分析一下NettyServer,HeaderExchangeServer实现细节。 1、NettyServer NettyServer整个类图如下: 首先从全貌上大概看一下NettyServer对象所持有的属性:AbstractPeer 1、private final ChannelHandler handler : 事件...
2018-07-23 12:23:56 2571
原创 源码分析Dubbo网络通讯篇之NettyServer网络事件之线程池
本文主要分析Dubbo线程池的构建过程,主要介绍官方文档中有关于ThreadPool的种类: ● fixed : 固定大小线程池,启动时建立线程,不关闭,一致持有。(缺省) ● cached :缓存线程池,空闲一分钟,线程会消费,需要时重新创建新线程。 ● limited :可伸缩线程池,但池中的线程数只会增长不...
2018-07-19 21:03:18 1888
原创 源码分析Dubbo网络通讯篇之NettyServer网络事件派发机制(Dispatch)
本节将主要学习Dubbo是如何使用Netty来实现网络通讯的。 从官网我们得知,Dubbo协议是使用单一长连接来进行网络传输,也就是说服务调用方持久与服务提供者建立一条连接,所有的服务调用调用信息通过。 一条TCP连接进行传输,在网络层至少要考虑如下问题: 1、服务端,客户端网络通讯模型(线程模型) 2、传输(编码解码、序列化)。 3、服务...
2018-07-17 12:27:34 2820
原创 源码分析Dubbo网络通讯篇概要总结(类图一览、服务端、客户端网络构造流程一览)
从本节开始将开始深入学习Dubbo网络通讯的底层实现细节,在深入学习Dubbo网络模型时,首先应从整体上了解Dubbo的网络通讯模型、线程模型是怎样的?下图是Dubbo官方给出的线程模型: 涉及如下方面: 1)网络调用客户端。 2)网络调用服务端。 3)网络传输,编解码、序列化。 4)网络服务端转发模型、线程池。 下面给出与上述网络模型对应的详细类图: 上述类做一个简单的结束...
2018-07-12 12:18:51 2079
原创 源码分析Dubbo集群容错策略
前面的文章,已经单独对服务发现(Directory、RegistryDirectory)、路由机制(Router)、负载均衡机制(LoadBalance),本节将重点分析集群容错机制(AbstractClusterInvoker),AbstractClusterInvoker就是将上述机制融合在一起,整个集群容错中,上述组件扮演的角色见下图所示,本文将重点分析AbstractClusterInvo...
2018-07-08 23:18:17 2331
原创 源码分析Dubbo负载算法
Dubbo支持在服务调用方对服务提供者采用负载均衡算法,LoadBalance 接口定义如下:@SPI(RandomLoadBalance.NAME)public interface LoadBalance { /** * select one invoker in list. * * @param invokers invokers. *...
2018-07-06 12:47:10 2586
rocketmq实战与源码分析.zip
2021-03-13
Netty实现私有协议,模仿dubbo单一长连接RPC服务调用,心跳检测机制源码
2017-03-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人