自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(23)
  • 收藏
  • 关注

原创 公众号:徘徊笔记

公众号:徘徊笔记CSDN博客:https://blog.csdn.net/ph3636

2019-04-20 12:53:33 390

原创 RocketMQ源码分析之接收消息

broker接收消息,处理器为SendMessageProcessor,先解析出原本的请求头类,构建trace上下文,执行钩子方法public RemotingCommand processRequest(ChannelHandlerContext ctx, RemotingCommand request) thro...

2019-04-21 23:06:18 522

原创 RocketMQ源码分析之从注册中心更新topic路由信息

核心方法为updateTopicRouteInfoFromNameServer,客户端会定时从注册中心同步topic的相关信息,当生产者消费者启动后会往客户端实例的ConcurrentMap<String/* group */, MQProducerInner> producerTable和ConcurrentMap<String/* group */, MQConsumerIn...

2019-04-21 23:03:06 1248 1

原创 RocketMQ源码分析之发消息

生产者发送消息,消息发送默认时间为3000ms,默认是同步发送producer.send(msg);publicSendResult send( Message msg) throws MQClientException, RemotingException, MQBrokerException, InterruptedException { return this.def...

2019-04-21 22:58:37 272

原创 RocketMQ源码分析之Consumer

实例化主方法为org/apache/rocketmq/example/benchmark/Consumer.java,以推模式为例,先实例化DefaultMQPushConsumer,消费队列分配模式为平均DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(group);public DefaultMQPushConsu...

2019-04-21 22:55:37 504

原创 RocketMQ源码分析之Producer

实例化主方法为org/apache/rocketmq/example/benchmark/Producer.java,先实例化一个product实例,设置实例生产者名字,设置钩子方法RPCHook会在请求前后执行,初始化默认异步发消息线程池。DefaultMQProducer producer = new DefaultMQProducer("benchmark_producer");...

2019-04-21 22:50:49 409

原创 RocketMQ源码分析之Broker注册(3)

开始往配置中心注册broker的topic相关信息,集群名,broker名,broker地址,brokerId,高可用地址即主从同步的地址,对应的filter服务地址列表,超时时间,是否压缩注册信息标志位。private void doRegisterBrokerAll(boolean checkOrderConfig, boolean oneway, TopicConfigSeri...

2019-04-21 22:46:04 585

原创 RocketMQ源码分析之Broker注册(2)

NameServer响应Broker请求查询注册版本,对于注册中心来说对应的是请求命令,处理方法如下,根据对应的code找出对应的处理类,这里只有一个默认处理类DefaultRequestProcessor,处理过程执行前后置钩子方法,把请求和通信通道组成一个任务提交到处理器对应的的线程池中执行,查询请求是经过编码发送到nameserver的,经过NettyClientHandler处理请求命令...

2019-04-20 18:55:18 374

原创 RocketMQ源码分析之Broker注册(1)

在broker启动时会开始第一次注册,以后会定时向注册中心注册本机的信息this.registerBrokerAll(true, false, true); this.scheduledExecutorService.scheduleAtFixedRate(new Runnable() { @Override public void run() {...

2019-04-20 18:52:15 1199

原创 RocketMQ源码分析之Broker(4)

ReputMessageService定时构建消息消费队列CommitLogDispatcherBuildConsumeQueue以及索引文件CommitLogDispatcherBuildIndex与针对布隆过滤器的消费过滤类CommitLogDispatcherCalcBitMap。ScheduleMessageService定时消息管理类。TransientStorePool...

2019-04-20 18:47:51 537 1

原创 RocketMQ源码分析之Broker(3)

初始化关于通信安全的文件监听模块,用来观察网络加密配置文件的更改。if (TlsSystemConfig.tlsMode != TlsMode.DISABLED) { // Register a listener to reload SslContext try { fileWatchService = new FileWatchService( ...

2019-04-20 18:44:06 448

原创 RocketMQ源码分析之Broker(2)

初始化BrokerControllerinitialize()首先加载四个配置文件,主要是恢复以前的数据,当然第一次重启的话,这四个文件中也没有任何数据,他们主要是继承了ConfigManager类扩展了具体的文件存储方法以及编解码方法。初始化通信服务类,快速通信服务类监听端口为10909public boolean initialize() throws CloneNotSuppo...

2019-04-20 12:47:42 706 1

原创 RocketMQ源码分析之Broker(1)

实例化本次举例的broker的主方法在org.apache.rocketmq.broker.BrokerStartup,同样的通过命令行启动可以读取入参配置的具体文件,根据启动命令配置的-c属性读取文件,并设置broker配置类BrokerConfig,服务端通信配置类NettyServerConfig,客户端通信配置类NettyClientConfig,具体信息存储配置类MessageSto...

2019-04-20 12:18:33 660

原创 RocketMQ源码分析之编解码

众多周知,在进行网络通信的时候都需要编解码,而RocketMQ依托Netty框架进行网络交互,只需要在上行和下行通道处理类中进行扩展处理即可完成编解码的工作。// 编码,下行通道往网络通道中写数据class NettyEncoder extends MessageToByteEncoder<RemotingCommand>class MessageToByteEncoder&...

2019-04-20 12:13:02 394

原创 RocketMQ源码分析之NameServer(下)

启动public void start() throws Exception { this.remotingServer.start(); if (this.fileWatchService != null) { this.fileWatchService.start(); }}NettyRemotingServer初始化Worker线程池...

2019-04-20 12:08:51 393

原创 RocketMQ源码分析之NameServer(上)

前序前面几篇是关于RocketMQ的介绍,从这篇开始就根据源码具体解析,分支是master,版本号是4.4.0。实例化注册中心的主方法在org/apache/rocketmq/namesrv/NamesrvStartup.java,通过命令行启动可以读取入参配置的具体文件,根据启动命令配置的-c属性读取文件,并设置到注册配置类namesrvConfig和服务端通信配置类nettySer...

2019-04-20 10:52:53 404

原创 RocketMQ事务消息

Apache RocketMQ在4.3.0版中已经支持分布式事务消息,这里RocketMQ采用了2PC的思想来实现了提交事务消息,同时增加一个补偿逻辑来处理二阶段超时或者失败的消息,如下图所示。RocketMQ事务消息流程概要上图说明了事务消息的大致方案,其中分为两个流程:正常事务消息的发送及提交、事务消息的补偿流程。事务消息发送及提交:(1) 发...

2019-04-07 11:27:49 733

原创 RocketMQ消息过滤与查询

消息过滤RocketMQ分布式消息队列的消息过滤方式有别于其它MQ中间件,是在Consumer端订阅消息时再做消息过滤的。RocketMQ这么做是还是在于其Producer端写入消息和Consomer端订阅消息采用分离存储的机制来实现的,Consumer端订阅消息是需要通过ConsumeQueue这个消息消费的逻辑队列拿到一个索引,然后再从CommitLog里面读取真正的消息实体内容,所...

2019-04-07 11:26:19 3069

原创 RocketMQ负载均衡

RocketMQ中的负载均衡都在Client端完成,具体来说的话,主要可以分为Producer端发送消息时候的负载均衡和Consumer端订阅消息的负载均衡。Producer的负载均衡Producer端在发送消息的时候,会先根据Topic找到指定的TopicPublishInfo,在获取了TopicPublishInfo路由信息后,RocketMQ的客户端在默认方式下selec...

2019-04-07 11:24:41 1494

原创 RocketMQ通信机制

简介RocketMQ消息队列集群主要包括NameServe、Broker(Master/Slave)、Producer、Consumer4个角色,基本通讯流程如下:(1) Broker启动后需要完成一次将自己注册至NameServer的操作;随后每隔30s时间定时向NameServer上报Topic路由信息。(2) 消息生产者Producer作为客户端发送消息时候,需要根据...

2019-04-07 11:22:56 1303

原创 RocketMQ特性

特性订阅与发布消息的发布是指某个生产者向某个topic发送消息;消息的订阅是指某个消费者关注了某个topic中带有某些tag的消息,进而从该topic消费数据。消息顺序消息有序指的是一类消息消费时,能按照发送的顺序来消费。例如:一个订单产生了三条消息分别是订单创建、订单付款、订单完成。消费时要按照这个顺序消费才能有意义,但是同时订单之间是可以并行消费的。Ro...

2019-04-07 11:19:02 156

原创 RocketMQ消息存储

消息存储是RocketMQ中最为复杂和最为重要的一部分,本节将分别从RocketMQ的消息存储整体架构、PageCache与Mmap内存映射以及RocketMQ中两种不同的刷盘方式三方面来分别展开叙述。消息存储整体架构消息存储架构图中主要有下面三个跟消息存储相关的文件构成。(1) CommitLog:消息主体以及元数据的存储主体,存储Producer端...

2019-04-07 11:17:49 1072

原创 RocketMQ架构设计

简介Apache RocketMQ是一个分布式消息传递和流媒体平台,具有低延迟,高性能和可靠性,万亿级容量和灵活的可扩展性。它提供了多种功能: 发布/订阅消息模型 预定的消息传递 消息追溯性按时间或偏移量 记录流媒体的中心 大数据集成 可靠的FIFO和严格的有序消息传递在同一队列中 高效的推拉消费模式 ...

2019-04-07 11:15:13 432

空空如也

空空如也

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

TA关注的人

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