自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 资源 (8)
  • 收藏
  • 关注

原创 ASCH区块链防数据篡改的情景演示

背景:部署三个节点(A/B/C)的区块链,对节点A上的数据库直接进行修改,将用户Ⅰ的balance和u_balance由1000增加修改成2000,另外两个节点(B、C)上面的数据保持不变,仍然是1000。数据篡改之后的现象:用户Ⅰ登陆节点A的系统,查看余额为2000;而登陆节点(B/C)的系统,查看余额为1000。交易操作:用户Ⅰ登陆节点A的系统,然后发起向用户Ⅱ转账1500的操作,转账

2018-01-31 10:03:29 1155

转载 如何保障微服务架构下的数据一致性

随着微服务架构的推广,越来越多的公司采用微服务架构来构建自己的业务平台。就像前边的文章说的,微服务架构为业务开发带来了诸多好处的同时,例如单一职责、独立开发部署、功能复用和系统容错等等,也带来一些问题。例如上手难度变大,运维变得更复杂,模块之间的依赖关系更复杂,数据一致性难以保证,等等。但是办法总是比问题多,本篇文章就来介绍一下我们是如何保障微服务架构的数据一致性的。

2017-09-15 09:04:16 7206

原创 RocketMQ——其他注意事项

1 消息过滤的方式1、简单消息过滤。订阅时指定topic下面tags;2、高级消息过滤。2.1)Broker所在的机器会启动多个FilterServer过滤进程;2.2)Consumer启动后,会向FilterServer上传一个过滤的Java类;2.3)Consumer从FilterServer拉消息,FilterServer将请求转发给Broker,FilterServer从Broker收到消息

2017-08-11 09:23:12 1562

原创 RocketMQ——Consumer篇:PULL模式下的消息消费(DefaultMQPullConsumer)

1 应用层的使用方式在应用层初始化DefaultMQPullConsumer类,然后调用该类的start方法启动Consumer;接下来的消费步骤如下:1、调用DefaultMQPullConsumer.fetchSubscribeMessageQueues(String topic)方法,根据topic获取对应的MessageQueue(即可被订阅的队列),在该方法中最终通过调用MQAdminIm

2017-08-11 09:20:13 7133

原创 RocketMQ——Consumer篇:PULL消费模式下的调度消费服务

与PUSH模式相比,PULL模式需要应用层不间断地进行拉取消息然后再执行消费处理,提高了应用层的编码复杂度,为了Pull方式的编程复杂度,RocketMQ提供了调度消费服务(MQPullConsumerScheduleService),在topic的订阅发送变化(初次订阅或距上次拉取消息超时)就触发PULL方式拉取消息。1 应用层使用方式该类是PULL模式下面的调度服务,当RebalanceImp

2017-08-11 09:12:20 5573

原创 RocketMQ——Consumer篇:PUSH模式下消费消息(顺序和并发两种)

1 接受并处理Broker返回的响应消息当发送拉取消息在Broker返回响应消息之后调用NettyRemotingAbstract.processMessageReceived(ChannelHandlerContext ctx, RemotingCommand msg)方法,大致逻辑如下:1、根据返回的响应对象RemotingCommand的opaque(请求序列号)从NettyRemotingA

2017-08-11 09:00:45 6423

原创 RocketMQ——Consumer篇:PUSH模式下的消息拉取(DefaultMQPushConsumer)

DefaultMQPushConsumerImpl中各个对象的主要功能如下:RebalancePushImpl:主要负责决定,当前的consumer应该从哪些Queue中消费消息;1)PullAPIWrapper:长连接,负责从broker处拉取消息,然后利用ConsumeMessageService回调用户的Listener执行消息消费逻辑;2)ConsumeMessageService:实现所谓

2017-08-11 08:48:26 8862 3

原创 RocketMQ——Consumer篇:PUSH模式下拉取消息服务的线程(PullMessageService)

只有在PUSH模式下才会使用PullMessageService服务线程,该线程主要是对pullRequestQueue:LinkedBlockingQueue<PullRequest>队列进行监测,处理该队列中的PullRequest请求对象;同时该线程也提供了两种拉取方式,分别是立即拉取和延迟拉取两种;1 拉取消息的处理逻辑在该线程的run方法中,循环地不间断地从pullRequestQueue

2017-08-11 08:27:58 2328 2

原创 RocketMQ——Consumer端自动地不间断地发起拉取消息的业务逻辑

Consumer端自动地不间断地发起拉取消息的业务逻辑

2017-08-11 08:23:34 1868

原创 RocketMQ——Consumer篇:向Broker同步消费进度的定时任务

每隔5秒调用一次MQClientInstance.persistAllConsumerOffset()方法将消费进度向Broker同步。遍历MQClientInstance.consumerTable: ConcurrentHashMap变量。对于PushConsumer端和PullConsumer端,处理逻辑是一样的,以DefaultMQPushConsumerImpl为例,调用DefaultM

2017-08-10 17:26:26 4376

原创 RocketMQ——Consumer篇:启动过程

RocketMQ提供了两种消费模式,PUSH和PULL,大多数场景使用的是PUSH模式,这两种模式分别对应的是DefaultMQPushConsumer类和DefaultMQPullConsumer类。PUSH模式实际上在内部还是使用的PULL方式实现的,通过PULL不断地轮询Broker获取消息,当不存在新消息时,Broker会挂起PULL请求,直到有新消息产生才取消挂起,返回新消息。故此处主要讲

2017-08-09 09:11:17 11741

原创 RocketMQ——Producer篇:其他功能介绍

1 向Broker发送心跳消息1、初始化HeartbeatData对象,将该Producer或Consumer的ClientID赋值给HeartbeatData对象的clientID变量;2、遍历MQClientInstance.consumerTable: ConcurrentHashMap<String/* group */, MQConsumerInner>变量,根据每个MQConsumer

2017-08-09 09:10:05 1569

原创 RocketMQ——客户端篇:Producer/Consumer的实例对象

调用MQClientInstance.start方法启动MQClientInstance对象;大致逻辑如下:1、检查MQClientInstance.ServiceState的状态(初始化状态为ServiceState.CREATE_JUST);只有状态为CREATE_JUST时才启动该Producer;其他状态均不执行启动过程;2、将MQClientInstance的ServiceState置为s

2017-08-09 09:08:18 1645

原创 RocketMQ——Producer篇:启动过程

在应用层初始化DefaultMQProducer的过程中,以Producer名称或者RPCHook的任一个或两个作为参数初始化DefaultMQProducer对象,内部以这些参数初始化了DefaultMQProducerImpl对象,其中,RPCHook是接口,由业务层来实现doBeforeRequest和doAfterResponse方法。在初始化之后对DefaultMQProducer对象设置

2017-08-09 09:06:51 2424

原创 RocketMQ——从NameServer更新客户端订阅的topic路由信息

由Producer或Consumer端调用MQClientInstance. updateTopicRouteInfoFromNameServer()方法的目的主要有:1)从NameServer获取该客户端订阅的每个topic的相关信息(包括每个topic对应的Broker信息和topic配置信息),用TopicRouteData对象表示;并将该对象信息存入MQClientInstance.topi

2017-08-09 09:03:54 1955 1

原创 RocketMQ——Producer篇:发送事务消息

该事务消息是指Producer端的业务逻辑处理与向MQ发送消息事件是在同一个事务里面,即这两件事件要么同时成功要么同时失败。 可以解决如下类似场景的问题:A用户和B用户的账户体系不在同一台服务器上面,现在A用户向B用户转账100元,为了提高执行效率,就采用消息队列的方式实现异步处理。大致逻辑是A用户扣款100元,然后发送消息给消息队列,B用户的程序从队列中获取转账信息并向B用户上账100元。 若

2017-08-09 08:56:43 4111

原创 RocketMQ——Producer篇:发送顺序消息

顺序消息主要是指局部顺序,即生产者通过将某一类消息发送至同一个队列来实现。与发生普通消息相比,在发送顺序消息时要对同一类型的消息选择同一个队列,即同一个MessageQueue对象。 目前RocketMQ定义了选择MessageQueue对象的接口MessageQueueSelector,里面有方法select(final List mqs, final Message msg, final Ob

2017-08-09 08:56:05 2806 1

原创 RocketMQ——Producer篇:发送定时消息

目前只支持固定精度级别的定时消息,服务器按照1-N定义了如下级别: “1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h”;若要发送定时消息,在应用层初始化Message消息对象之后,调用Message.setDelayTimeLevel(int level)方法来设置延迟级别,按照序列取相应的延迟级别,例如level=2,则延迟为5

2017-08-09 08:55:29 6074

原创 RocketMQ——Producer篇:发送普通消息

以DefaultMQProducer.send(Message msg)方法为例,讲解Producer消息的发送逻辑,该方法最终调用DefaultMQProducerImpl.sendDefaultImpl(Message msg, CommunicationMode communicationMode, SendCallback sendCallback, long timeout)方法完成消息的

2017-08-09 08:53:54 4762 2

原创 RocketMQ——Broker篇

1 Broker的初始化过程调用BrokerController对象的initialize方法进行初始化工作。大致逻辑如下:1、加载topics.json、consumerOffset.json、subscriptionGroup.json文件,分别将各文件的数据存入TopicConfigManager、ConsumerOffsetManager、SubscriptionGroupManager对

2017-08-09 08:47:34 11209 5

原创 RocketMQ——Name Server篇

1 NameServer的功能1、每个Broker启动的时候会向Namesrv发送注册请求,Namesrv接收Broker的请求注册路由信息,NameServer保存活跃的broker列表,包括Master和Slave;2、用来保存所有topic和该topic所有队列的列表;3、NameServer用来保存所有broker的Filter列表4、接收client(Producer和Consumer)的

2017-08-08 17:48:36 8024

原创 RocketMQ存储篇——事务消息相关的文件

在RocketMQ-3.1.9版本中,有TransactionStateService类,用于存储每条事务消息的状态。在该类中有两个成员变量tranRedoLog:ConsumeQueue和tranStateTable: MapedFileQueue,其中tranRedoLog变量用于事务状态的Redolog,当进程意外宕掉,可通过redolog恢复所有事务的状态,tranStateTable变量用

2017-08-08 17:45:55 1014

原创 RocketMQ存储篇——HA高可用

在集群模式的部署方式中,Master与Slave配对是通过指定相同的brokerName参数来配对,Master的BrokerId必须是0,Slave的BrokerId必须是大于0的数。一个Master下面可以挂载多个Slave,同一个Master下的多个Slave通过指定不同的BrokerId来区分。有4种部署方式: 部署方式 优点 缺点 备注 单个Master模式 一旦Br

2017-08-08 17:43:46 10656 1

原创 RocketMQ存储篇——数据文件的访问入口(DefaultMessageStore)

1 根据topic和queueId查找ConsumeQueue(findConsumeQueue)调用findConsumeQueue(String topic, int queueId)方法获得,从ConsumeQueue集合consumeQueueTable: ConcurrentHashMap2 根据物理偏移量和数据大小获取消息内容(lookMessageByOffset)调用lookMess

2017-08-08 17:39:13 1523

原创 RocketMQ存储篇——Config文件以及执行延迟消息的线程服务

在$HOME\store\config目录下面存储各类config文件,包括:consumerOffset.json、delayOffset.json、subscriptionGroup.json、topics.json四类config文件。 topics.json文件由TopicConfigManager类解析并存储;存储每个topic的读写队列数、权限、是否顺序等信息。 consumerOf

2017-08-08 17:33:15 2101 1

原创 RocketMQ存储篇——IndexFile和IndexService

1 IndexFile为操作Index文件提供访问服务,Index文件的存储位置是:$HOME \store\index\${fileName},文件名fileName是以创建时的时间戳命名的,文件大小是固定的,等于40+500W*4+2000W*20= 420000040个字节大小。 1.1 Index文件的数据结构 Index Header结构各字段的含义:beginT

2017-08-08 17:29:12 4122 2

原创 RocketMQ存储篇——Consumequeue

Consumequeue类对应的是每个topic和queuId下面的所有文件。Consumequeue类文件的存储路径默认为$HOME/store/consumequeue/{topic}/{queueId}/{fileName},每个文件由30W条数据组成,每条数据的结构如下图所示: 消息的起始物理偏移量physical offset(long 8字节)+消息大小size(int 4字节)+ta

2017-08-08 17:23:21 6297 1

原创 RocketMQ存储篇——CommitLog

commitlog文件的存储地址:$HOME\store\commitlog\${fileName},每个文件的大小默认1G =1024*1024*1024,commitlog的文件名fileName,名字长度为20位,左边补零,剩余为起始偏移量;比如00000000000000000000代表了第一个文件,起始偏移量为0,文件大小为1G=1073741824;当这个文件满了,第二

2017-08-08 17:04:09 21583 4

原创 RocketMQ存储篇——MapedFileQueue

1.3 MapedFileQueue应用层访问commitlog和consumequeue文件是通过MappFileQueue来操作MapedFile类,从而间接操作磁盘上面的文件;MappFileQueue是由多个MapedFile队列组成的,该类的结果如下图所示。 功能清单如下:1.3.1 获取在某时间点之后更新的文件(getMapedFileByTime) 方法getM

2017-08-08 16:55:35 1251

原创 RocketMQ存储篇——整体结构以及MappedFile讲解

讲解RocketMQ的数据存储整体结构以及大文件操作对象MapedFile

2017-08-08 16:46:20 5381 1

原创 Dubbo——动态适配器类

部分接口的动态适配器类

2017-05-15 17:27:32 1134

原创 Dubbo——扩展点加载机制

扩展点加载机制        只有标有@SPI注解的接口类才会查找扩展点的实现,依次从下面这三个路径读取扩展点文件:META-INF/dubbo/internal 、META-INF/dubbo/ 、META-INF/services/,其中dubbo内部实现的各种扩展文件都放在META-INF/dubbo/internal目录下面。 以com.alibaba.dubbo.rpc.ProxyFac...

2017-05-15 17:17:32 4606 1

原创 Dubbo——服务治理

服务治理Dubbo提供了集群部署、路由、负载均衡等容错机制,在客户端引用服务时,由MockClusterInvoker封装具体的集群策略类,默认是FailoverCluster类,具体逻辑见《4.4.2 远程引用服务》部分。由集群策略类将Directory中的多个Invoker伪装成一个Invoker,对上层调用端是透明的,不同的集群策略有不同的处理方式。主要流程基本是一致的。1)首先调用Mock...

2017-05-15 17:04:27 11941 2

原创 Dubbo——过滤器链

过滤器链各类协议protocol类均是由ProtocolFilterWrapper类封装的,ProtocolFilterWrapper在服务的暴露与引用的过程中根据KEY是PROVIDER还是CONSUMER来构建服务提供者与消费者的调用过滤器链。ProtocolFilterWrapper的export和refer方法代码如下:构建过滤器链的方法是buildInvokerChain,代码如下:在构...

2017-05-15 16:55:51 1916

原创 Dubbo——监听器链

监听器链  各类协议protocol类均是由ProtocolListenerWrapper类封装的,在服务的暴露和引用过程中,都是调用该类的export和refer方法,在这些方法中完成监听器链的创建。一、ExporterListenerProtocolListenerWrapper是在服务暴露时构建了监听器链,在服务暴露(exporter)的过程中调用监听器所提供的回调函数,Dubbo没有实现监...

2017-05-15 16:52:32 2185

原创 Dubbo——服务端接收请求的处理流程

服务端接收请求的处理流程在创建NettyServer对象时,初始化了NettyHandler对象,该对象中的ChannlHandler赋值为NettyServer对象。在接受到消息之后,调用NettyHandler.messageReceived方法,后续的调用链为:NettyServer—>MultiMessageHandler-->HeartbeatHandler—> AllC

2017-05-15 16:49:53 1469

原创 Dubbo——消费端调用

消费端调用1、在业务层代码中调用远程接口的方法时,实际上是调用的本地创建的代理对象。即在《4.4.3 创建服务类的本地代理》中创建的代理对象。2、在该代理对象中,调用了InvokerInvocationHander.invoke方法。远程调用以Invcation、Result为中心,在这个方法中根据调用的远程方法和传入的参数构建RpcInvcation对象,该对象中的成员变量包括远程调用的方法名、...

2017-05-15 16:48:13 3801

原创 Dubbo——Transport网络传输层

Transport网络传输层1请求/响应的处理流程NettyHandler:继承netty对象SimpleChannelHandler,重写了channelConnected、channelDisconnected、messageReceived、writeRequested、exceptionCaught方法,当netty的通道发生连接、断开连接、收到消息、写入消息、捕获异常等事件时触发Nett...

2017-05-15 16:45:36 2219

原创 Dubbo——Exchange信息交换层

Exchange信息交换层1、Exchange层的类分析ReferenceCountExchangeClient:将请求交HeaderExchangeClient处理,不进行任何其他操作。HeaderExchangeClient:提供心跳检查功能;将send、request、close等事件转由HeaderExchangeChannel处理,HeaderExchangeChannel对象中的Cha...

2017-05-15 16:40:06 2006

原创 Dubbo——各协议暴露和引用服务的逻辑

各协议暴露和引用服务的逻辑    目前Dubbox版本支持的协议有dubbo、injvm、rmi、hessian、thrift、memcached、redis、rest等九种,其中memcached和redis协议只支持服务引用不支持服务暴露;这些协议有的继承AbstractProxyProtocol类,有的实现了AbstractProtocol接口。服务暴露调用export方法,引用服务调用re...

2017-05-15 16:34:55 5397 1

金融分布式账本技术安全规范.pdf

《金融分布式账本技术安全规范》(JR/T 0184—2020)金融行业标准近日由中国人民银行正式发布。标准规定了金融分布式账本技术的安全体系,包括基础硬件、基础软件、密码算法、节点通信、账本数据、共识协议、智能合约、身份管理、隐私保护、监管支撑、运维要求和治理机制等方面。标准适用于在金融领域从事分布式账本系统建设或服务运营的机构。

2020-02-26

秒杀系统架构分析与实战

介绍秒杀系统必须面对的问题、设计理念;如何抗住高并发请求;如何防止秒杀操作中的作弊行为;如何保证不发生“超发”。

2018-06-04

RocketMQ技术讲解V2.0

RocketMQ源码分析,分为存储篇、NameServer篇、Broker篇、Producer篇、Consumer篇五大部分进行源码级的讲解。大致如下: 1、讲解commitlog、consumequeue、index、transaction文件等数据结构、数据读写、HA高可用等功能; 2、讲解NameServer的启动、注册Broker、客户端查询Topic的路由信息等功能; 3、讲解Broker的启动、注册、处理Producer发送消息、处理Consumer拉取消息、事务消息的处理等功能; 4、讲解Producer端的启动、发送普通消息、定时消息、顺序消息、事务消息等功能; 5、讲解Consumer端的启动、PUSH模式的消息消费、PULL模式的消息消费、顺序消费/并发消费等功能;

2017-08-08

RocketMQ源码分析讲解

RocketMQ源码分析,分为存储篇、NameServer篇、Broker篇、Producer篇、Consumer篇五大部分进行代码级的讲解

2017-08-04

RocketMQ-3.2.6源码工程

RocketMQ的源码工程,直接导入到eclipse工程中即可使用;为了在eclipse中运行RocketMQ工程,在NamesrvStartup类的128行、BrokerStartup类的160号加入了一句环境路径的配置语句

2017-05-15

struts-2.3.1.2源码

struts-2.3.1.2源码,与本人上传的xwork-core-source-2.3.1.2源码,以及所有依赖的jar包一起,可以迅速搭建工程,跟踪并分析struct源码

2012-07-14

xwork-core-source-2.3.1.2源码

xwork-core-source-2.3.1.2\src\main\java下面是源码,研究struts-2.3.1.2源码必备

2012-07-14

struts-2.3.1.2源码依赖的所有jar包

asm-commons-2.2.3,asm-3.1,commons-collections,commons-fileupload-1.2,commons-io-1.4,commons-lang-2.5,commons-logging,freemarker-2.3.16,jsp-api,junit-4.4,ognl-3.0.4,org.testng.feature_5.9.0.4,servlet-api,spring,testng-5.8-jdk15,velocity-1.4,velocity-tools-view-1.2

2012-07-14

空空如也

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

TA关注的人

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