这里先说点儿私货,为什么在众多的MQ中,我尤其看好RocketMQ,主要的原因之一就是它的事务消息。

关于RocketMQ的事务消息的机制,我在之前的一篇文章中已经做过讲解,文章地址 我说分布式事务之消息一致性事务2-rocketmq的实现

RocketMQ的事务消息是目前主流的MQ中唯一支持分布式事务的解决方案,也是众多最终一致性方案中较为成熟的。

本文中,我将带领大家了解并运用TransactionMQProducer实现事务消息的发送,并对TransactionMQProducer进行基于Spring的封装,使我们的项目更方便的集成事务消息能力。

其中,SpringBoot支持的版本已经上传至github,代码地址为RocketMQTransactionProducerAgent.java

Read More

本文我将继续讲解如何使用DefaultMQPushConsumer对RocketMQ中的消息进行消费,同时在文章的第二部分将继续带领读者朋友对DefaultMQPushConsumer进行薄封装,让我们在Spring中更容易对消息进行消费。

DefaultMQPushConsumer不区分普通消息和事务消息,即我们能够利用DefaultMQPushConsumer实现对普通消息和事务消息的消费。

Read More

本文是《跟我学RocketMQ系列》的第三篇,前面两篇中,我带领大家了解了如何搭建RocketMQ以及如何通过web端的console进行RocketMQ的运维。

从本文开始,我将从研发的角度,逐步深入RocketMQ。

本文先讲解如何利用RocketMQ的java客户端进行普通消息的发送以及对它进行薄封装,以便更好的适配spring框架。

对RocketMQ的封装版本的代码已经上传github,shield-rocketmq-client-spring 欢迎大家star及fork~

Read More

本文介绍在hexo中增加置顶属性的方式

转载自 Hexo文章置顶的方法

安装插件

npm uninstall hexo-generator-index --save
npm install hexo-generator-index-pin-top --save

然后在需要置顶的文章的Front-matter中加上top即可:

---
title: 2019
date: 2019-02-14 16:10:03
top: 10
---

设置置顶标志

打开:/themes/*/layout/_macro/post.ejs
直接在最前面加入以下代码即可

<% if (page.top) { %>
<i class="fa fa-thumb-tack"></i>
<font color=7D26CD>置顶</font>
<span class="post-meta-divider">|</span>
<% } %>

上文中,我们对shield-job要实现的功能和主要流程做了简单的分析。本文,我将带着大家进行技术选型、模块划分及对应的数据库表结构设计。

核心思路还是简洁、易理解、突出原理。

技术选型

技术选型如下表

组件名 作用
MySQL 保存服务注册信息、任务元数据、记录日志等信息。是整个调度框架的核心存储设施
RocketMQ 任务发布介质,注册中心与后台管理直接的沟通媒介。任务调度过程中用于任务的下发
SpringBoot 核心开发框架
JDK8 基于JDK8,向后兼容
Tomcat8 基于Tomcat8,向后兼容

PS: 之所以选择了RocketMQ,一方面是笔者偏爱这款MQ中间件,另一方面也是想帮助大家更多的了解主流的分布式开发组件,提升个人技术素养。

Read More

从本篇开始,我将尝试一种新的写作方式,边进行项目开发边进行博客记录,通过这种方式,更加细致的带领读者体验一个框架从想法到实现的完整过程。

这次我将要实现的手写框架为:“shield-job”分布式任务调度框架,整个时间周期可能会持续一到数个月,不怂,就是干。

什么是分布式任务调度框架

首先,简单介绍下什么是分布式任务调度框架。

任务调度是指: 基于给定的时间点,在一定时间间隔或者给定执行次数自动执行的任务。

WEB服务器接受请求时,会创建一个新的线程服务。但是由于资源有限,必须对资源进行控制,首先就是限制服务线程的最大数目,其次考虑以线程池共享服务的线程资源,降低频繁创建、销毁线程的消耗;然后任务调度信息的存储包括运行次数、调度规则以及运行数据等。这些就是一个任务调度框架要考虑的问题点。

Read More

线上问题无大小,只要有隐患,出现了就是大问题。细节就是魔鬼。

细节就是魔鬼,今天真实的体验了一次什么叫做惊弓之鸟。

新上的需求今天开始放量,从放量开始的半小时左右开始出现大量的告警,这是很不寻常的。查看ELK告警信息,发现是sql-parser异常。我很惊讶,按道理这种问题是不应该出现的,但是线上问题无小事。

于是截取了一段日志如下,(消除了敏感信息)

Caused by: java.util.concurrent.ExecutionException: com.xxxx.sql.parser.SQLParserException: syntax error, expect RPAREN, actual IDENTIFIER url
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
at com.alipay.zdal.parser.DefaultSQLParser.getStatement(DefaultSQLParser.java:177)
... 68 more
Caused by: com.xxxx.sql.parser.SQLParserException: syntax error, expect RPAREN, actual IDENTIFIER url
at com.alipay.zdal.parser.sql.parser.SQLParser.accept(SQLParser.java:136)
at com.alipay.zdal.parser.sql.dialect.mysql.parser.MySqlStatementParser.parseInsert(MySqlStatementParser.java:1774)

Read More

上文中我们初步了解了RocketMQ的基础结构,并在linux环境下部署了单节点模式的消息服务。

官方提供了命令行模式下的管理工具,脚本路径位于:

[安装路径]/bin/mqadmin

支持对topic、订阅组、broker等的统计及管理。

对于开发者,我们更愿意使用图形化的可视界面来进行管理,这种方式对于运维也是极为友好的。官方早已给我们考虑到了,在github的rocketmq-externals项目中,有一个名为rocketmq-console的子项目,就是图形化界面的RocketMQ管控台。

由于当前版本官方没有提供打包好的二进制文件,因此需要我们自行下载源码编译打包。

Read More

本文是“跟我学”系列的第一个系列–跟我学RocketMQ的第一篇,从本文开始,我将带领读者朋友们一起基于RocketMQ的最新稳定版4.3.2学习RocketMQ,从运维到开发全方位的角度去剖析这款高性能的分布式消息中间件。并将笔者在实践中的最佳实践一起分享给读者,话不多说,我们开始吧。

简介RocketMQ

开始之前我们简单了解下RocketMQ,明确一下为何要学习这款消息队列。

RocketMQ是阿里巴巴开源,目前已经成为Apache顶级开源项目的分布式消息中间件。它具有高吞吐量、支持分布式事务、高可靠等特点。在阿里内部,支撑了包括双十一在内的各种大规模、高并发的分布式场景。它支持高可靠部署,值得企业进行大规模应用。使用Java语言开发,更有利于开发者进行源码的学习及二次开发。

Read More

努力就会离目标越来越近,只是靠近就会很满足。

今年开始要在年初定学习计划了,后续可以根据这个计划及时调整方向。还有就是可以督促自己,惰性是需要克服的最大的敌人。

读书列表

下面这些书籍有些是读过的,但是感觉当时理解并不透彻,今年的目标至少读完其中的百分之八十并输出读书笔记。

笔记不在多,在于质量,就按照书名为单位写笔记即可。

  1. 《聊聊架构》(精读)
  2. 《从零开始学架构》(精读)
  3. 《码出高效Java开发手册》(精读)
  4. 《实现领域驱动设计》
  5. 《MySQL技术内幕》(精读)
  6. 《Java高并发编程详解》(精读)
  7. 《Kubernates权威指南–企业级容器云实战》
  8. 《深入理解JavaG1GC》(精读)
  9. 《Spring源码深度解析》(精读)
  10. 《从Paxos到zookeeper》
  11. 《收获,不止SQL优化》
  12. 《RocketMQ技术内幕》(精读)
  13. 《Redis深度历险:核心原理与应用实战》(精读)
  14. 《深入理解Java虚拟机》(精读)

非技术书籍

  1. 《跃迁:从技术到管理的硅谷路径》
  2. 《最后一颗子弹留给我》
  3. 《C形包围》
  4. 《Q形绞索》
  5. 《克苏鲁神话》
  6. 《淘宝十年产品事》
  7. 《每个人都会死但我总以为自己不会》

个人项目开发列表

今年上半年先完成以下的项目,后续的还没想好

  1. shield-job任务调度分发
  2. shield-transaction消息一致性分布式事务框架
  3. shield-rpc基于netty的RPC框架

待更新文章列表

  1. 《我说分布式事务之强一致分布式事务》系列补充文章,主要对XA、2PC、3PC等进行总结
  2. 《我说MySQL之索引》
  3. 《我说分布式开发之幂等》
  4. 《我说分布式开发之Spring事务管理》
  5. 《我说分布式开发之分布式配置》
  6. 《我说编码规范》系列
  7. 《跟我学RocketMQ》系列【更新中】
  8. 《自己写消息一致性分布式事务框架》
  9. 《自己写任务调度中心》

    进度

    待更新

天道酬勤

Fork me on GitHub