今天在使用mybatis建立到数据库的连接时,出现了一个时区报错。java.sql.SQLException: The server time zone value ‘Öйú±ê׼ʱ¼ä’ is unrecognized…
这也是第一次遇到,感觉挺有意思的,写篇博客记录下。

报错如下:

java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' 
is unrecognized or represents more than one time zone. 
You must configure either the server or JDBC driver (via the serverTimezone configuration property)
to use a more specifc time zone value 
if you want to utilize time zone support.
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:127)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:87)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:61)

Read More

SkyWalking是一款分布式系统中用于提供分布式追踪功能的开源软件。

从5.x开始,项目进化为一个功能完备的APM(Application Performance Management)系统。被用于追踪、监控和诊断分布式系统,特别是使用微服务架构,云原生或容器技术。提供以下主要功能:

分布式追踪和上下文传输
应用、实例、服务性能指标分析
根源分析
应用拓扑分析
应用和服务依赖分析
慢服务检测
性能优化

它的主要特性如下:

多语言探针或类库
    Java自动探针,追踪和监控程序时,不需要修改源码。
    社区提供的其他多语言探针
        .NET Core
        Node.js
多种后端存储: ElasticSearch, H2
支持OpenTracing
    Java自动探针支持和OpenTracing API协同工作
轻量级、完善功能的后端聚合和分析
现代化Web UI
日志集成
应用、实例和服务的告警

Read More

这里先说点儿私货,为什么在众多的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

上文中,我们对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

Fork me on GitHub