{"_id":"@ai-partner-x/aiko-boot-starter-mq","_rev":"4-7c4b3a7dad79902d4e341a526f70a9fe","name":"@ai-partner-x/aiko-boot-starter-mq","dist-tags":{"latest":"0.1.5"},"versions":{"0.1.3":{"name":"@ai-partner-x/aiko-boot-starter-mq","version":"0.1.3","keywords":["ai-first","mq","rabbitmq","spring-boot","decorator","typescript"],"_id":"@ai-partner-x/aiko-boot-starter-mq@0.1.3","maintainers":[{"name":"moyin333","email":"158182907@qq.com"}],"dist":{"shasum":"5d5f279fe56fe86f30a0e7d457c93a0787058b77","tarball":"https://registry.npmjs.org/@ai-partner-x/aiko-boot-starter-mq/-/aiko-boot-starter-mq-0.1.3.tgz","fileCount":5,"integrity":"sha512-TifThLCGozxgJiKErOe4y75DoQhyn0BTQ5DCgIPmkayizJvE3af7JZhF4JbJsVQ12kCe9ax9oyhSrPNxjg969g==","signatures":[{"sig":"MEQCIEur8QHM4K7o0TOR6LasQ6fIN36QVM3ojkcETJQ0gIgvAiARRLLs9dM7NNNO008qjMKwb7V9AhxkQ5pHvfDIo5lnYA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99685},"main":"./dist/index.js","type":"module","_from":"file:ai-partner-x-aiko-boot-starter-mq-0.1.3.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rm -rf dist","example":"tsx examples/main.ts","type-check":"tsc --noEmit"},"_npmUser":{"name":"moyin333","email":"158182907@qq.com"},"_resolved":"/tmp/35e3c6ccf50f1bd5e4678cf51c00b2ec/ai-partner-x-aiko-boot-starter-mq-0.1.3.tgz","_integrity":"sha512-TifThLCGozxgJiKErOe4y75DoQhyn0BTQ5DCgIPmkayizJvE3af7JZhF4JbJsVQ12kCe9ax9oyhSrPNxjg969g==","_npmVersion":"10.8.2","description":"AI-First Framework - MQ with Spring Boot style decorators (RabbitMQ)","directories":{},"_nodeVersion":"20.20.1","dependencies":{"uuid":"^11.0.3","amqplib":"^0.10.4","kafkajs":"^2.2.4","reflect-metadata":"^0.2.1","rocketmq-client-nodejs":"^1.0.3","@ai-partner-x/aiko-boot":"0.1.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.0.0","tslib":"^2.8.1","vitest":"^1.2.0","typescript":"^5.3.0","@types/uuid":"^10.0.0","@types/amqplib":"^0.10.8"},"_npmOperationalInternal":{"tmp":"tmp/aiko-boot-starter-mq_0.1.3_1773857068817_0.11704634184466811","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@ai-partner-x/aiko-boot-starter-mq","version":"0.1.4","keywords":["ai-first","mq","rabbitmq","spring-boot","decorator","typescript"],"_id":"@ai-partner-x/aiko-boot-starter-mq@0.1.4","maintainers":[{"name":"moyin333","email":"158182907@qq.com"}],"dist":{"shasum":"c163386abe5f3a9ea547a0c829f52e881678109b","tarball":"https://registry.npmjs.org/@ai-partner-x/aiko-boot-starter-mq/-/aiko-boot-starter-mq-0.1.4.tgz","fileCount":5,"integrity":"sha512-DCMcGcnwz0sulSCG2Zdh4g+eS61vl2KZ1xZH4kDAPWzgBK6QjBBwuDw7W32WiQRrs8IRP1a514hazxbqLuPHmA==","signatures":[{"sig":"MEQCIEl/eMA1MgArYr7t/SrlZenY6uvt4OdgZCF7XlPQ3atPAiBUUDuuSqu6e+Dn3EARa402wU4eAwag46iVxWZ40/L7Eg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99685},"main":"./dist/index.js","type":"module","_from":"file:ai-partner-x-aiko-boot-starter-mq-0.1.4.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rm -rf dist","example":"tsx examples/main.ts","type-check":"tsc --noEmit"},"_npmUser":{"name":"moyin333","email":"158182907@qq.com"},"_resolved":"/tmp/9740dea472b40d8db16e910092e8f0ed/ai-partner-x-aiko-boot-starter-mq-0.1.4.tgz","_integrity":"sha512-DCMcGcnwz0sulSCG2Zdh4g+eS61vl2KZ1xZH4kDAPWzgBK6QjBBwuDw7W32WiQRrs8IRP1a514hazxbqLuPHmA==","_npmVersion":"10.8.2","description":"AI-First Framework - MQ with Spring Boot style decorators (RabbitMQ)","directories":{},"_nodeVersion":"20.20.1","dependencies":{"uuid":"^11.0.3","amqplib":"^0.10.4","kafkajs":"^2.2.4","reflect-metadata":"^0.2.1","rocketmq-client-nodejs":"^1.0.3","@ai-partner-x/aiko-boot":"0.1.4"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.0.0","tslib":"^2.8.1","vitest":"^1.2.0","typescript":"^5.3.0","@types/uuid":"^10.0.0","@types/amqplib":"^0.10.8"},"_npmOperationalInternal":{"tmp":"tmp/aiko-boot-starter-mq_0.1.4_1773908278745_0.22410371623907888","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@ai-partner-x/aiko-boot-starter-mq","version":"0.1.5","description":"AI-First Framework - MQ with Spring Boot style decorators (RabbitMQ)","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"dependencies":{"amqplib":"^0.10.4","kafkajs":"^2.2.4","reflect-metadata":"^0.2.1","rocketmq-client-nodejs":"^1.0.3","uuid":"^11.0.3","@ai-partner-x/aiko-boot":"0.1.5"},"devDependencies":{"@types/amqplib":"^0.10.8","@types/uuid":"^10.0.0","tslib":"^2.8.1","tsup":"^8.0.0","tsx":"^4.21.0","typescript":"^5.3.0","vitest":"^1.2.0"},"keywords":["ai-first","mq","rabbitmq","spring-boot","decorator","typescript"],"publishConfig":{"registry":"https://registry.npmjs.org","access":"public"},"scripts":{"build":"tsup","dev":"tsup --watch","type-check":"tsc --noEmit","clean":"rm -rf dist","test":"vitest run","example":"tsx examples/main.ts"},"_id":"@ai-partner-x/aiko-boot-starter-mq@0.1.5","_integrity":"sha512-KIY6IxKp8/QqjcEZk2UuTnKCVKYh1tAoaHr2BJFsWsLaX8tyY3wlu7XBh9B/qrZJ9C2gQfFIImQChgOBXDnVoA==","_resolved":"/tmp/5a12cb5bbfdb04c3247c2f3e8b6496a6/ai-partner-x-aiko-boot-starter-mq-0.1.5.tgz","_from":"file:ai-partner-x-aiko-boot-starter-mq-0.1.5.tgz","_nodeVersion":"20.20.1","_npmVersion":"10.8.2","dist":{"integrity":"sha512-KIY6IxKp8/QqjcEZk2UuTnKCVKYh1tAoaHr2BJFsWsLaX8tyY3wlu7XBh9B/qrZJ9C2gQfFIImQChgOBXDnVoA==","shasum":"f60d131de590beaff2312d12569a74a72bd2f9cd","tarball":"https://registry.npmjs.org/@ai-partner-x/aiko-boot-starter-mq/-/aiko-boot-starter-mq-0.1.5.tgz","fileCount":5,"unpackedSize":99685,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD2TcgyO5KP+J5SebQ+ytj2Bq8VD9w1lpqAuWJmiZHIiQIgUAeaewi2myAhmsiVvz/01ONjA7MBKf2JkX06YxbkgdA="}]},"_npmUser":{"name":"moyin333","email":"158182907@qq.com"},"directories":{},"maintainers":[{"name":"moyin333","email":"158182907@qq.com"},{"name":"liujin0528","email":"un0528@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/aiko-boot-starter-mq_0.1.5_1774102918530_0.7747984456055828"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-18T18:04:28.629Z","modified":"2026-03-21T14:21:58.837Z","0.1.3":"2026-03-18T18:04:29.054Z","0.1.4":"2026-03-19T08:17:58.892Z","0.1.5":"2026-03-21T14:21:58.695Z"},"keywords":["ai-first","mq","rabbitmq","spring-boot","decorator","typescript"],"description":"AI-First Framework - MQ with Spring Boot style decorators (RabbitMQ)","maintainers":[{"name":"moyin333","email":"158182907@qq.com"},{"name":"liujin0528","email":"un0528@hotmail.com"}],"readme":"# @ai-partner-x/aiko-boot-starter-mq\n\nMQ 模块，Spring Boot 风格的消息队列。支持 RabbitMQ、Kafka、RocketMQ。\n\n## 安装\n\n```bash\npnpm add @ai-partner-x/aiko-boot-starter-mq\n```\n\n## 配置\n\n通过环境变量配置（风格对齐 Spring Boot）：\n\n| 变量 | 说明 | 默认 |\n|-----|------|------|\n| `MQ_TYPE` | `rabbitmq` \\| `kafka` \\| `rocketmq` \\| `memory`| `rabbitmq` |\n| `MQ_HOST` | 主机 | `localhost` |\n| `MQ_PORT` | 端口 | `5672` |\n| `MQ_USERNAME` / `MQ_PASSWORD` | 认证（生产环境必须显式设置，避免使用 guest/guest） | `guest` / `guest` |\n| `MQ_VHOST` | RabbitMQ 虚拟主机 | `/` |\n| `MQ_USE_TLS` | 是否使用 AMQPS（TLS） | `false` |\n| `MQ_PREFETCH_COUNT` | RabbitMQ 预取数量，0 表示不限制 | `10` |\n| `MQ_RECONNECT_INITIAL_DELAY_MS` | 连接断开后首次重连延迟 | `1000` |\n| `MQ_RECONNECT_MAX_DELAY_MS` | 重连退避最大延迟 | `30000` |\n| `MQ_CLIENT_ID` | Kafka 客户端 ID | `aiko-boot-mq` |\n| `MQ_GROUP_ID` | Kafka/RocketMQ 消费者组 | `default-group` |\n| `MQ_ENDPOINTS` | RocketMQ 代理端点（如 `127.0.0.1:8081`） | - |\n| `MQ_NAMESPACE` | RocketMQ 命名空间 | `''` |\n\n**Kafka**：默认端口 9092，设置 `MQ_PORT=9092` 或依赖 host 解析。  \n**RocketMQ**：需 5.x + Proxy，默认端口 8081，可设置 `MQ_ENDPOINTS=host:8081`。  \n\n**生产环境提醒**：使用默认凭证 `guest`/`guest` 时，启动会输出警告。请在生产环境显式设置 `MQ_USERNAME` 和 `MQ_PASSWORD`。\n\n## 使用（文档格式）\n\n### 1. 定义消费者（方法级 @MqListener）\n\n```ts\nimport { MqListener, ConsumerContainer } from '@ai-partner-x/aiko-boot-starter-mq';\n\nexport interface UserCreatedEvent {\n  userId: string;\n  email: string;\n  name: string;\n}\n\nexport class UserCreatedListener {\n  @MqListener({ topic: 'user.created', tag: 'add', group: 'user-group' })\n  async onUserCreated(event: UserCreatedEvent) {\n    console.log('User created:', event);\n  }\n}\n\nConsumerContainer.registerListener(UserCreatedListener);\n```\n\n### 2. 发送消息（MqSender 重载）\n\n```ts\nimport { MqTemplate } from '@ai-partner-x/aiko-boot-starter-mq';\n\nconst template = new MqTemplate();\n\n// send(topic, body)\nawait template.send('user.created', { userId: '123', email: 'u@e.com', name: 'John' });\n\n// send(topic, tag, body)\nawait template.send('user.created', 'add', { userId: '123', email: 'u@e.com', name: 'John' });\n\n// send(MqMessage)\nawait template.send({ topic: 'user.created', tag: 'add', body: { userId: '123', ... } });\n```\n\n### 3. 启动方式\n\n**方式 A：使用 createApp（推荐）**\n\n当项目使用 `createApp()` 时，MqAutoConfiguration 会自动发现并加载，无需手动初始化。\n\n```ts\nimport { createApp } from '@ai-partner-x/aiko-boot/boot';\nimport { ConsumerContainer, MqTemplate } from '@ai-partner-x/aiko-boot-starter-mq';\nimport './listeners/UserCreatedListener'; // 注册消费者\n\nconst context = await createApp({ srcDir: __dirname });\n// MQ 已在 ApplicationReady 时自动初始化\nconst template = new MqTemplate();\nawait template.send('user.created', payload);\n```\n\n**方式 B：手动初始化（如 Next.js、独立脚本）**\n\n```ts\nimport { MqAutoConfiguration } from '@ai-partner-x/aiko-boot-starter-mq';\nimport './listeners/UserCreatedListener'; // 注册消费者\n\nlet initialized = false;\n\nexport async function initMq() {\n  if (initialized) return;\n  await MqAutoConfiguration.init();\n  initialized = true;\n}\n\nif (typeof window === 'undefined' && !initialized) {\n  initMq().catch(console.error);\n}\n```\n\n## 目录结构（文档 1:1）\n\n```\npackages/mq/src/\n├── core/             # MqException, MqErrorHandler, MqSerializer, MqMessage, MqSender\n├── config/           # MqProperties, MqAutoConfiguration\n├── decorators/       # @MqListener（方法级 topic/tag/group）\n├── producer/         # MqTemplate\n├── consumer/         # ConsumerContainer\n├── adapters/         # RabbitMqAdapter, KafkaMqAdapter, RocketMqAdapter, InMemoryMqAdapter\n├── logger.ts\n└── index.ts\n```\n","readmeFilename":"README.md"}