前言
消息中间件作为分布式系统的重要成员,各大公司及开源均有许多解决方案。目前主流的开源解决方案包括RabbitMQ、RocketMQ、Kafka、ActiveMQ等。消息这个东西说简单也简单,说难也难。简单之处在于好用方便,接入简单使用简单,异步操作能够解耦系统间的依赖,同时失败后也能够追溯重试。难的地方在于,设计一套可以支撑业务的消息机制,并提供高可用架构,解决消息存储、消息重试、消息队列的负载均衡等一系列问题。然而难也不代表没有方法或者“套路”,熟悉一下原理与实现,多看几个框架的源码后多总结势必能找出一些共性。
消息框架大同小异,熟练掌握其原理、工作机制是必要的。就拿用的比较多的RocketMQ为引,来说说消息引擎的设计与实现。阿里的消息引擎经过了从Notify到Napoli、再到MetaQ三代的发展,现在已经非常成熟,在不同部门的代码中现在没准都还可以从代码里看到这一系列演进过程。当前的Apache RocketMQ 就是阿里将MetaQ项目捐赠给了Apache基金会,而内部还是沿用MetaQ的名称。
栈和队列部分(10)
-
设计一个有getMin功能的栈(士★☆☆☆)
-
由两个栈组成的队列(尉★★☆☆)
-
如何仅用递归函数和栈操作逆序一个栈(尉★★☆☆)
-
猫狗队列(士★☆☆☆)
-
用一个栈实现另一个栈的排序(士★☆☆☆)
-
用栈来求解汉诺塔问题(校★★★☆)
-
生成窗口最大值数组(尉★★☆☆)
-
构造数组的MaxTree(校★★★☆)
-
求最大子矩阵的大小(校★★★☆)
-
最大值减去最小值小于或等于num的子数组数量(校★★★☆)
链表问题(20)
-
打印两个有序链表的公共部分(士★☆☆☆)
-
在单链表和双链表中删除倒数第K 个节点(士★☆☆☆)
-
删除链表的中间节点和a/b 处的节点(士★☆☆☆)
-
反转单向和双向链表(士★☆☆☆)
-
反转部分单向链表(士★☆☆☆)
-
环形单链表的约瑟夫问题(原问题:士★☆☆☆进阶:校★★★☆)
-
判断一个链表是否为回文结构(普通解法士★☆☆☆)(进阶解法尉★★☆☆)
-
将单向链表按某值划分成左边小、中间相等、右边大的形式(尉★★☆☆)
-
复制含有随机指针节点的链表(尉★★☆☆)
-
两个单链表生成相加链表(士★☆☆☆)
-
两个单链表相交的一系列问题(将★★★★)
-
将单链表的每K个节点之间逆序(尉★★☆☆)
-
删除无序单链表中值重复出现的节点(士★☆☆☆)
-
在单链表中删除指定值的节点(士★☆☆☆)
-
将搜索二叉树转换成双向链表(尉★★☆☆)
-
单链表的选择排序(士★☆☆☆)
-
一种怪异的节点删除方式(士★☆☆☆)
-
向有序的环形单链表中插入新节点(士★☆☆☆)