jackrabbit

发布人:仓颉技术交流平台官方
分类:网络通信 / 消息队列协议

需要基于仓颉语言实现高性能、内存安全的 AMQP 协议客户端库

等待接取
2026-03-10
3

悬赏内容

招募内容

第一部分:项目背景与战略目标
jackrabbit 是一个面向 RabbitMQ 的 AMQP(Advanced Message Queuing Protocol)通信库,提供交换机、队列、发布/消费、RPC 等核心消息模式抽象,属于典型的后端中间件基础设施。当前实现依赖 JavaScript 生态的 amqplib,在 OpenHarmony 等受限环境中存在性能瓶颈与内存安全隐患。本项目旨在利用仓颉编程语言(Cangjie Language)1.0.0+ 的核心优势——编译期内存安全(杜绝缓冲区溢出、UAF 等 CVE)、轻量级线程模型(支持万级并发连接)、强类型系统(精准建模 AMQP 帧结构)以及 CJNative 高性能 FFI 能力,构建一个原生、高效、可嵌入微服务或边缘设备的 AMQP 客户端库。该库将为仓颉生态提供可靠的消息传递基座,支撑事件驱动架构、任务分发、服务解耦等关键后端场景。

第二部分:核心功能需求与技术规格

2.1 功能模块分解

模块类别

核心职责

关键技术要求 (仓颉特性)

验收依据

AMQP 协议解析

解析/序列化 AMQP 0.9.1 协议帧(方法帧、内容帧、心跳等)

利用 struct 精确内存对齐与位域定义协议结构;使用模式匹配处理帧类型分发

通过 RabbitMQ 官方互操作性测试套件

连接与信道管理

管理 TCP 连接、AMQP 信道生命周期、自动重连机制

基于 RAII 自动释放连接资源;轻量级线程处理多信道并发

重连成功率 ≥99.9%,无连接泄漏

交换机与队列抽象

提供 Exchange/Queue 对象模型,支持 direct/fanout/topic 类型

强类型接口封装路由键、持久化、排他性等配置;泛型支持消息体类型

支持所有 RabbitMQ 官方教程示例场景

发布/消费与 RPC

实现消息发布、异步消费回调、RPC 请求-响应模式

使用 Result 显式处理 ACK/NACK;async/await 简化 RPC 编排

消息投递可靠性达 at-least-once,RPC 超时可控

2.2 非功能性需求规范

  • 性能指标:单连接消息吞吐量 ≥ 50,000 msg/s(对比 Node.js amqplib 提升 ≥30%),P99 发布延迟 < 5ms。

  • 安全要求:完全消除内存安全漏洞;敏感凭证(如密码)在安全内存中处理,禁止明文日志输出。

  • 可靠性:网络闪断、服务端重启等异常下自动恢复会话状态;消息确认机制防止丢失。

  • 可维护性:模块高内聚低耦合,协议层与业务抽象层分离;接口设计符合仓颉惯用法。

2.3 核心接口设计示例 (伪代码)

interface AmqpClient {
    // 创建连接
    fn connect(url: String): Result<Connection, AmqpError>

    // 获取默认直连交换机
    fn defaultExchange(conn: &Connection): Result<Exchange, AmqpError>

    // 声明队列并绑定
    fn declareQueue(
        exchange: &Exchange,
        name: String,
        options: QueueOptions
    ): Result<Queue, AmqpError>

    // 发布消息
    fn publish<T: Serializable>(
        exchange: &Exchange,
        message: T,
        routingKey: String,
        props: PublishProperties
    ): Result<Void, AmqpError>

    // 异步消费
    async fn consume<T: Deserializable>(
        queue: &Queue,
        handler: fn(T, Acknowledger) -> Void,
        options: ConsumeOptions
    ): Result<Void, AmqpError>
}

enum AmqpError {
    ConnectionRefused,
    InvalidCredentials,
    ChannelClosed,
    SerializationFailed(String),
    Timeout
}

第三部分:项目交付物与实施路线图

3.1 阶段性交付物清单

  • 第一阶段:AMQP 帧解析器、连接/信道管理、基础 Exchange/Queue 抽象 + 单元测试(覆盖率≥95%)+ 接口文档

  • 第二阶段:完整消息模式支持(fanout/topic/RPC)、自动重连、背压控制 + 集成测试(与 RabbitMQ 3.10+ 互操作)+ 压测报告

  • 第三阶段:性能调优报告、OpenHarmony HAP 示例、cjpm 发布包(支持标准 Linux 与 OHOS)

3.2 项目实施路线图

阶段

核心任务

交付成果

周期预估

里程碑

基础构建

协议解析、连接管理、CJNative 绑定

可编译 cjlib、单测集

6 周

cjpm test 全量通过

功能完善

消息模式实现、重连机制、错误恢复

集成测试报告、示例应用

5 周

覆盖 RabbitMQ 官方 7 种教程场景

性能优化

零拷贝序列化、批量发布、连接池

压测报告、性能对比数据

4 周

吞吐量 ≥50k msg/s,P99 < 5ms

第四部分:技术实现规范与质量认证体系

4.1 仓颉语言专项质量规范

  • 100% 通过 cjfmt 格式校验,禁止手动调整代码风格。

  • 所有外部输入(如 URL、路由键)经强类型验证,禁止字符串拼接构造协议字段。

  • 错误路径必须返回 Result<T, E>,禁止使用 panic 处理业务异常。

4.2 测试与验证标准

  • 单元测试覆盖所有协议帧类型、连接状态转换、错误边界条件,行覆盖率 ≥95%。

  • 建立 AMQP 协议模糊测试(fuzzing)套件,持续验证协议解析鲁棒性。

  • 使用仓颉 sanitizer 工具链进行内存安全与并发数据竞争检测。

4.3 文档与可维护性

  • 所有 public 接口需包含 Doc Comments,说明线程安全级别、生命周期约束及错误码含义。

  • 记录关键架构决策(如为何选择同步 vs 异步 I/O 模型)至 ADR 文档。

  • 提供 CONTRIBUTING.md 明确本地构建、RabbitMQ 测试环境搭建、PR 提交流程。

4.4 持续集成质量门禁

cjpm fmt --check
cjpm build --release
cjpm lint --deny-warnings
cjpm test --all-features --coverage
cjpm bench --baseline=node-amqplib-v0.10

第五部分:技术栈与开发环境

  • 核心语言:仓颉编程语言(Cangjie Language)1.0.0+(强制)

  • 构建与包管理:CJPM (Cangjie Package Manager)

  • 测试框架:仓颉原生测试框架(支持异步测试与 mock)

  • 质量工具:cjfmt, cjpm lint, cjpm bench, cj-sanitizer

  • 环境要求:Linux 开发环境(RabbitMQ 3.10+ 测试集群),CI 使用 cangjie-lang/cjci:1.0 官方 Docker 镜像

相关附件

暂无附件

质量认证要求

交付件

NO

交付件描述

备注

1

三方库源代码

源代码

2

三方库测试方案和用例

测试用例和文档

3

用户手册,API文档,设计文档,license文档

资料和文档

验收标准

1.功能

  1. 三方库必须有明确的功能;

  2. 如果参考对标库移值开发,功能与参考三方库保持一致。

2.资料

  1. Readme:包含简介,软件架构,目录结构,下载安装(编译构建),接口说明,使用示例,约束限制,开源协议,参与贡献等内容;

  2. Changelog,三方库版本需包含基本的修改说明。

3.标准遵从性(可选),三方库实现需满足对应协议或行业标准,举例

  1. appquth:支持对OAuth 的PKCE扩展;

  2. icu4j:支持unicode标准库,通用字符集ISO/IEC 10646。

4.性能目标

  1. 性能敏感三方库接口运行性能持平对标三方库

5.开源协议遵从,必须包含License文件

  1. 放置合适的开源License协议,建议Apache License Version 2.0;

  2. 引用或参考开源三方库,需遵从开源协议。

6.网络安全要求

  1. 满足基础的网络安全红线及隐私要求,符合安全编码规范。

过程质量要求

指标分类

指标名称

指标要求

度量工具

牵引 OR Must

代码度量

平均文件代码行

≤300 LOC

CMetricsPlus,CJMetric

Must

总文件重复率

C/C++≤4%;相比开源不劣化

CMetricsPlus,CJMetric

Must

源文件重复率

C/C++≤4%;相比开源不劣化

CMetricsPlus,CJMetric

Must

平均函数或方法代码行*

≤30 LOC

CMetricsPlus,CJMetric

Must

总代码重复率

C/C++≤10%;相比开源不劣化

CMetricsPlus,CJMetric

Must

源文件代码重复率

C/C++≤10%;相比开源不劣化

CMetricsPlus,CJMetric

Must

平均圈复杂度

≤5;相比开源不劣化

CMetricsPlus,CJMetric

Must

冗余代码

“0” 【2】;

CMetricsPlus,CJMetric

Must

不安全函数

NA

CMetricsPlus,CJMetric

Must

静态检查

编译告警

“0” 【2】

Compile工具

牵引

通用静态告警

“0” 【2】

Pclint plus,CJLINT

Must

开发者测试

DT用例密度(个/KLOC)

> 40

手工

牵引

DT代码语句覆盖率

>=85%

Gcov,cjcov

牵引

DT代码分支覆盖率

>=50%

Gcov,cjcov

牵引

未做DT文件数

0

手工

牵引

问题解决率

遗留问题DI

整体<10

Issue

牵引

遗留致命缺陷数(0)

0

Issue

Must

累计缺陷解决率

85%

Issue

牵引

软件开发

每日构建成功率

100%

CI

牵引

测试评估

测试缺陷密度(/KLOC)

5-9

人工

牵引

测试用例密度(个/KLOC)

20-40

人工

牵引

初验用例自动化率

100%

CIDA

牵引

HLT自动化用例比率

【85%,95%】

CIDA

牵引

开源第三方(含构建工具)

开源片段引用

0(除例外备案类)

FOSSBOT+人工

Must

可信构建

二进制一致性

0(含可澄清)

人工

Mus