RocketMQ架构原理解析(一):整体架构 RocketMQ架构原理解析(二):消息存储(CommitLog) RocketMQ架构原理解析(三):消息索引(ConsumeQueue & IndexFile) RocketMQ架构原理解析(四):消息生产端(Producer) 一.概述 如果你曾经使用过RocketMQ,那么一定对以下发送消息的代码不陌生 DefaultMQProducer producer = new DefaultMQProducer("producerGroup&…
RocketMQ架构原理解析(一):整体架构 RocketMQ架构原理解析(二):消息存储(CommitLog) RocketMQ架构原理解析(三):消息索引(ConsumeQueue & IndexFile) RocketMQ架构原理解析(四):消息生产端(Producer) 一.概述 RocketMQ作为一个apache的顶级项目,拥有将近16K的star,它稳定的系统及强悍的性能,无疑在国内已经成为了企业消息队列的首选.接下来的一段时间,鄙人准备出一系列文章,从源码出发,逐一剖析Rocke…
一.概述 "索引"一种数据结构,帮助我们快速定位.查询数据 前文我们梳理了消息在Commit Log文件的存储过程,讨论了消息的落盘策略,然而仅仅通过Commit Log存储消息是远远不够的,例如当我们需要消费某个topic的消息时,通过对Commit Log整体遍历寻找消息的方式无疑非常的低效.所以本章将引出2个很重要的概念:消费队列.IndexFile 二.消费队列 2.1 概念 什么是消费队列呢?其实在上一章的消息协议格式中,就有消息队列的体现,简单回顾一下协议的前6个字段: m…
一.概述 由前文可知,RocketMQ有几个非常重要的概念: broker 服务端,负责存储.收发消息 producer 客户端1,负责产生消息 consumer 客服端2,负责消费消息 既然是消息队列,那消息的存储的重要程度不言而喻,本节我们聚焦broker服务端,看下消息在broker端是如何存储的,它的落盘策略是怎样的,又是如何保证高效 二.写入流程 RocketMQ的普通单消息写入流程如下 简单可以分为三大块: 写入前准备 加锁后消息写入 消息落盘及集群同步 2.1 准备 其实消息的写入…
1. 分布式术语 1.1. 异常 服务器宕机 内存错误.服务器停电等都会导致服务器宕机,此时节点无法正常工作,称为不可用. 服务器宕机会导致节点失去所有内存信息,因此需要将内存信息保存到持久化介质上. 网络异常 有一种特殊的网络异常称为——网络分区 ,即集群的所有节点被划分为多个区域,每个区域内部可以通信,但是区域之间无法通信. 磁盘故障 磁盘故障是一种发生概率很高的异常. 使用冗余机制,将数据存储到多台服务器. 1.2. 超时 在分布式系统中,一个请求除了成功和失败两种状态,还存在着超时状态.…
RocketMQ是阿里开源的分布式消息中间件,跟其它中间件相比,RocketMQ的特点是纯JAVA实现:集群和HA实现相对简单:在发生宕机和其它故障时消息丢失率更低. 一.RocketMQ专业术语 Producer(生产者) 消息生产者,位于用户的进程内,Producer通过NameServer获取所有Broker的路由信息,根据负载均衡策略选择将消息发到哪个Broker,然后调用Broker接口提交消息. Producer Group 生产者组,简单来说就是多个发送同一类消息的生产者称之为一个…
Tomcat 发展这么多年,已经比较成熟稳定.在如今『追新求快』的时代,Tomcat 作为 Java Web 开发必备的工具似乎变成了『熟悉的陌生人』,难道说如今就没有必要深入学习它了么?学习它我们又有什么收获呢? 静下心来,细细品味经典的开源作品 .提升我们的「内功」,具体来说就是学习大牛们如何设计.架构一个中间件系统,并且让这些经验为我所用. 美好的事物往往是整洁而优雅的.但这并不等于简单,而是要将复杂的系统分解成一个个小模块,并且各个模块的职责划分也要清晰合理. 与此相反的是凌乱无序,比如…
通过前面两篇<Request 接收参数乱码原理解析一:服务器端解码原理>和<Request 接收参数乱码原理解析二:浏览器端编码原理>,了解了服务器和浏览器编码解码的原理,接下来结合项目中遇到的具体问题,分析乱码问题的解决方法. 1.用户身份验证Cookie乱码问题 用户登录后,通常用Cookie记录身份,如把用户名记录到Cookie中,其它页面读取Cookie,对Cookie值验证,符合一定规则的话则认为是合法用户. protected void Page_Load(object…
爬虫框架--Scrapy 如果你对爬虫的基础知识有了一定了解的话,那么是时候该了解一下爬虫框架了.那么为什么要使用爬虫框架? 学习框架的根本是学习一种编程思想,而不应该仅仅局限于是如何使用它.从了解到掌握一种框架,其实是对一种思想理解的过程. 框架也给我们的开发带来了极大的方便.许多条条框框都已经是写好了的,并不需要我们重复造轮子,我们只需要根据自己的需求定制自己要实现的功能就好了,大大减少了工作量. 参考并学习优秀的框架代码,提升编程代码能力 scrapy框架的介绍 比较流行的爬虫的框架有sc…
什么是feign? 来自官网的解释:Feign makes writing java http clients easier 在使用feign之前,我们怎么发送请求? 拿okhttp举例: public static void post(String url, HashMap<String, String > paramsMap){ OkHttpClient mOkHttpClient = new OkHttpClient(); FormBody.Builder formBodyBuilder…