Skip to content
This repository has been archived by the owner on May 30, 2023. It is now read-only.

问题请教 #44

Open
pndx opened this issue Feb 28, 2022 · 5 comments
Open

问题请教 #44

pndx opened this issue Feb 28, 2022 · 5 comments

Comments

@pndx
Copy link

pndx commented Feb 28, 2022

大佬,为什么要用到lua?
为什么有用到hexists、zscore等?
$object->getCompressingThreshold()这个方法是哪来的?
大佬,这个是咋写出来的?深刻理解swoole?
好多看不懂的,有难度

@pndx
Copy link
Author

pndx commented Feb 28, 2022

Config

  • config.php

    包含系统配置参数

Connection

  • Connector

    连接器合约,约定了子类需要实现的方法。

  • RedisConnector

    基于Redis的连接器具体实现类,底层封装了Predis客户端,通过__call方法调用Predis客户端方法。

Console

Driver

  • Redis

    • LuaScripts

      Lua操作Redis脚本,在Queue中调用。

    • Queue

      AbstractQueue的实现类,包含了比较复杂的代码,不是很理解,需要继续阅读。

  • DriverFactory

    根据配置生成相应的Queue对象。

Exception

AintQueueException(异常抽象父类)。
  • ConnectorException(连接器异常)
  • CoroutineNumberExceedException(协程数量执行异常)
  • InvalidArgumentException(无效参数异常)
  • InvalidDriverException(无效驱动异常)
  • InvalidJobException(无效任务异常)
  • RuntimeException(运行时异常)
  • SerializationException(序列化异常)

Logger

  • LoggerInterface

    日志合约(PSR-3规范)

  • DefaultLogger

    底层使用monolog/monolog做日志处理,按照日志级别将日志记录到不同的日志文件中。

Resource

dashboard(前端状态面板),这里只是一个页面,调用/api/queue_status的数据来显示图表。

Serializer

  • SerializerInterface

    序列化和反序列化合约

  • ClosureSerializer

    闭包序列化与反序列化实现类

  • PhpSerializer

    Php序列化与反序列化实现类

  • CompressingSerializer

    压缩序列化与反序列化实现类

  • Factory

    序列化与反序列化实现类调用,使用了单例模式

Worker

  • AbstractWorker

    Worker抽象类,包含了queue、logger、process的初始化。这里的queue、logger都使用了依赖注入,process是Swoole Process模块的调用。

  • ConsumerWorker

    消费者Worker实现类,包含了比较复杂的代码,不是很理解,需要继续阅读。

  • MonitorWorker

    观察器Worker实现类,包含了比较复杂的代码,不是很理解,需要继续阅读。

  • PipeMessage

    将原始字符串格式消息转化为数组,取得type和payload的值。

Others

  • AbstractQueue

    Queue抽象类,部分实现了QueueInterface,未实现的部分在子类里实现。

  • Compressable

    没理解getCompressingThreshold是干嘛的。

  • JobInterface

    Job合约,约定子类需要实现的方法。

  • JobMiddlewareInterface

    Job中间件合约,约定Job中间件需要实现的方法。

  • JobSnapshotterInterface

    Job事件合约,约定Job事件需要实现的方法。

  • Manager

    包含了比较复杂的代码,不是很理解,需要继续阅读。

  • QueueInterface

  • WorkerManager

    使用依赖注入导入queue和logger,包含了线程信号处理,包含了worker的相关处理,包含了比较复杂的代码,不是很理解,需要继续阅读。

@Littlesqx
Copy link
Owner

用 lua 是保证多个 redis 语句执行的原子性;
队列的设计用到了相关的数据结构,所以相应的用了;
https://github.com/Littlesqx/aint-queue/blob/master/src/Compressable.php 实现了这个接口的 job 有这个方法;
读其他类似的组件源码,明白原理就能一步步写出来了

@pndx
Copy link
Author

pndx commented Feb 28, 2022

感谢回复,我在研究研究,好多还不是很懂

@pndx
Copy link
Author

pndx commented Mar 1, 2022

QueueReloadFailedCommand的id参数是没有在使用吗?

@Littlesqx
Copy link
Owner

QueueReloadFailedCommand的id参数是没有在使用吗?

看了下确实没有使用

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants