首页 » 网站推广 » php轻量队列技巧_Spring 嵌入式轻量消息队列

php轻量队列技巧_Spring 嵌入式轻量消息队列

访客 2024-12-15 0

扫一扫用手机浏览

文章目录 [+]

项目地址: https://github.com/wangyuheng/embedded-mq-spring-boot-starter

什么是行列步队

行列步队是用于存放的容器,可供消费者取出进行消费。

php轻量队列技巧_Spring 嵌入式轻量消息队列

不雅观察者模式

不雅观察者(Observer)模式的定义:指多个工具间存在一对多的依赖关系,当一个工具的状态发生改变时,所有依赖于它的工具都得到关照并被自动更新。
这种模式有时又称作发布-订阅模式、模型-视图模式,它是工具行为型模式。

php轻量队列技巧_Spring 嵌入式轻量消息队列
(图片来自网络侵删)

Observer 本来的意思是不雅观察者,但详细的实现中并不是主动去不雅观察,而是被动的吸收来自 Subject 的关照,以是更得当的名字该当是"投递"。

而且关照的模式还存在一个弊端: 关照及多个 ConcreteObserver 的消费程序仍在一个同步线程内,以是只是代码构造层面的解耦,底层还是一个事务内。

为理解决这个弊端,将的发送及 N 个消费程序拆分为 N+1 个事务,以是引入行列步队用于存储 Subject。

领域模型设计罗列领域观点

梳理交互关系

代码实现LinkedBlockingQueue 作为存储 Message 的容器。
Store 用于存储。
为了兼容多个 Consumer,每个 Consumer 指定一个唯一标识作为 Partition Key,对应唯一的一个 LinkedBlockingQueue。
e.g. Map<Partition, LinkedBlockingQueue<Message>> messageQueueMap = new ConcurrentHashMap<>();Producer 通过 Transport 将发送只多个 Partition Key 的 LinkedBlockingQueue 行列步队中每个 Consumer 开启一个线程,通过轮询办法从 LinkedBlockingQueue 行列步队中消费。
代码片段VmStore

Transport

ConsumerCluster

利用 LinkedBlockingQueue 却未利用 take 方法的缘故原由是为了灵巧掌握消费线程的启停。

Spring 集成

为了方便利用,通过 annotation 的形式与 Spring 框架进行集成。

示例Consumer

Producer

代码实现

其他如何跨运用消费?通过 MySQL、Redis 等公共存储更换 Store 及 Transport 实现。
MySQL 须要考虑行锁。

相关文章

php绘制k线技巧_运用EXCEL制作股市K线图

通过K线图,人们能够把逐日或某一周期的市况表现完备记录下来,股价经由一段韶光的盘档后,在图上即形成一种分外区域或形态,不同的形态显...

网站推广 2024-12-17 阅读0 评论0