若要将开源项目包发布到maven中央仓库,官方指南指出需要具备如下必要条件:
- 是releases版本
- 有
javadoc
和sources
- 经过
GPG
签名 - 必要的POM信息
- 开源包的坐标,即
groupId
和artifactId
那么如何发布呢?这里采用最便捷通用的一种方式,使用Sonatype提供的OSSRH(Open Source Software Repository Hosting )来进行上传。
A thousand miles begins with a single step .
若要将开源项目包发布到maven中央仓库,官方指南指出需要具备如下必要条件:
javadoc
和sources
GPG
签名groupId
和artifactId
那么如何发布呢?这里采用最便捷通用的一种方式,使用Sonatype提供的OSSRH(Open Source Software Repository Hosting )来进行上传。
文件上传是一个很常见的功能,在业务场景中其又可分为单文件上传、分片上传、断点续传、秒传等。
一个小文件上传在一个http连接便可以很快的完成,其无需担心上传失败重新上传的问题。而一个大文件的上传则不能这样,试想一个场景:10G的文件直接上传,如果上传一方的网速很好,服务器的网络带宽很小,那么服务器的带宽全被这个上传连接占用,其他人上传文件则已没有带宽可用;如果在网速较差的环境下上传,快要上传完成的时候网络中断,又得重新上传,一定会抓狂。
这里以 ubuntu18.04 LTS 系统为例
查看系统内核版本:
1 | uname -a |
查看已安装内核信息,确认需要安装的相应包:
1 | sudo dpkg --get-selections |grep linux |
顾名思义,ThreadLocal
是为线程提供私有的局部变量。它不同于其他常规的变量,需要使用自身的get
和set
方法来获取和设置值。ThreadLocal
的典型应用是在类中被申明为静态变量,用于关联用户ID、事务ID,亦或者其他需要线程独有的属性。
对于ThreadLocal
,只要该线程处于活动状态并且ThreadLocal
实例是可访问的,每个线程都保留对其本地线程副本的隐式引用。如果线程消失后,其所有副本线程本地实例便会受到垃圾回收(除非其他情况,即线程外存在对这些副本的引用)。
rocketmq支持有序的发送消息,有序的消费消息,这里便来看一下如何实现?
实战方面均以
RocketMQTemplate
形式展现,集成方案详见《springboot中rocketmq的集成与使用》
消息的有序发送方面,我们可以直接使用syncSendOrderly
(同步有序发送)和asyncSendOrderly
(异步有序发送)两种类型的方法进行发送消息,他们的区别就如命名一样是同步和异步的区别。
rocketmq支持发送事务消息,即发送消息的事务性,这里便来看一下如何实现?
实战方面均以
RocketMQTemplate
形式展现,集成方案详见《springboot中rocketmq的集成与使用》
首先使用@RocketMQTransactionListener
定义一个监听器来模拟执行本地事务和事务会查:
消费者消费偏移位置的持久化是消费客户端的行为,是在client启动的时候设定的一个定时任务,如下所示:
1 | this.scheduledExecutorService.scheduleAtFixedRate(new Runnable() { |
rocketmq的client在启动的时候,会通过开启一个定时任务来定期刷新topic信息,这里就来看一下这个刷新的过程。
首先来看一下这个定时任务:
1 | this.scheduledExecutorService.scheduleAtFixedRate(new Runnable() { |
producer
在rocketmq
的作用是消息的生产者,consumer
在rocketmq
的作用是消息的消费者,它的生命周期是跟项目相关的,即是由使用者控制的。而为什么要将这两个角色的启动关闭流程放在一起剖析呢?是因为他们都是MQ的客户端,在启动和关闭的行为上,有着很多共同的地方。接下来便将会来仔细探究其启动和关闭的过程。
producer
在启动的时候会做一系列的内部初始化,其启动的源码如下所示:
1 | public void start() throws MQClientException { |
这里以在ubuntu18.04上安装为例,来说明安装单个实例rocketmq的过程和验证情况。
下载地址如下,选择想要下载的版本即可:
http://rocketmq.apache.org/release_notes/
在自己的环境安装目录下解压
1 | $ unzip rocketmq-all-4.5.2-bin-release.zip |