Agent Skillsiii-hq/iii › iii-pubsub

iii-pubsub

GitHub

提供基于主题的发布/订阅消息机制,支持内存和Redis适配器。用于实时通知、解耦组件及跨实例广播,适用于可容忍丢包的场景。

engine/src/workers/pubsub/skills/SKILL.md iii-hq/iii

Trigger Scenarios

需要实时事件广播 实现组件间松耦合通信 跨进程或跨实例的即时信号传递

Install

npx skills add iii-hq/iii --skill iii-pubsub -g -y
More Options

Non-standard path

npx skills add https://github.com/iii-hq/iii/tree/main/engine/src/workers/pubsub/skills -g -y

Use without installing

npx skills use iii-hq/iii@iii-pubsub

指定 Agent (Claude Code)

npx skills add iii-hq/iii --skill iii-pubsub -a claude-code -g -y

安装 repo 全部 skill

npx skills add iii-hq/iii --all -g -y

预览 repo 内 skill

npx skills add iii-hq/iii --list

SKILL.md

Frontmatter
{
    "name": "iii-pubsub",
    "description": "Fire-and-forget topic pub\/sub: broadcast an event with `publish` and every matching `subscribe` trigger receives it. Use for real-time notifications where missed events are acceptable."
}

iii-pubsub

The iii-pubsub worker is topic-based publish/subscribe messaging. Publish an event to a named topic with the publish function and every registered subscribe trigger whose topic matches is invoked with the raw payload — no envelope, no persistence, no retries. It is fire-and-forget broadcast: subscribers receive each event as it arrives, and a subscriber that is offline simply misses it.

The worker exposes one callable function (publish, registered with the bare function id "publish" — no namespace prefix) and one trigger type (subscribe). Two adapters: local (default; in-memory broadcast channels; only delivers to subscribers in this engine process; no external dependency) and redis (redis_url: ${REDIS_URL:redis://localhost:6379}; uses Redis Pub/Sub so events propagate across multiple engine instances).

When to Use

  • Real-time notifications consumers may miss without consequence — UI live updates, ephemeral signals, telemetry mirroring.
  • Loose coupling where an event source should not know about its consumers.
  • Cross-instance fan-out of ephemeral events (configure the redis adapter).

Boundaries

  • No persistence, ordering, or retries — a subscriber that is down misses events permanently. Use iii-queue (topic mode, durable:subscriber) when every consumer must process every event.
  • Topic matching is exact string equality; there are no wildcards or hierarchical patterns. Register one trigger per topic.
  • An empty topic is rejected: publish returns topic_not_set, and a subscribe trigger registered with an empty topic never fires.
  • For key/value or stream change reactivity, use iii-state or iii-stream instead — iii-pubsub carries discrete events, not state.

Functions

  • publish — broadcast an event to a topic; every subscribe trigger on that exact topic receives the raw data. Empty topic returns topic_not_set.

Reactive triggers

Bind a subscribe trigger when a function should run every time publish broadcasts to a configured topic. The handler receives the raw data value from the publish call directly — no envelope. Multiple triggers can subscribe to the same topic; each gets an independent copy (true fan-out).

Reach for it when:

  • A domain event from one part of the system should kick off side effects elsewhere without the publisher knowing the consumers.
  • You want cross-instance fan-out via the redis adapter.

If subscribers must reliably process every event with retries and dead-letter handling, use iii-queue's durable:subscriber instead — subscribe is fire-and-forget.

How to bind

  1. Register a handler: iii.registerFunction('notifications::on-order-shipped', handler).
  2. Register the trigger:
iii.registerTrigger({
  type: 'subscribe',
  function_id: 'notifications::on-order-shipped',
  config: {
    topic: 'orders.shipped',  // required, non-empty. Exact match only — no wildcards.
  },
})

The handler receives the published data unchanged, with no topic field; if one handler serves multiple topics, embed the topic inside data at publish time. The handler's return value is ignored and there is no retry.

For the published payload shape, call iii get function info on publish or the handler function id.

Version History

  • c6f6fde Current 2026-08-20 17:17

Same Skill Collection

crates/iii-worker/src/sandbox_daemon/skills/SKILL.md
engine/src/workers/bridge_client/skills/SKILL.md
engine/src/workers/configuration/skills/SKILL.md
engine/src/workers/cron/skills/SKILL.md
engine/src/workers/engine_fn/skills/SKILL.md
engine/src/workers/observability/skills/SKILL.md
engine/src/workers/queue/skills/SKILL.md
engine/src/workers/rest_api/skills/SKILL.md
engine/src/workers/shell/skills/SKILL.md
engine/src/workers/state/skills/SKILL.md
engine/src/workers/stream/skills/SKILL.md
engine/src/workers/worker/skills/SKILL.md
skills/iii-architecture-patterns/SKILL.md
skills/iii-core-primitives/SKILL.md
skills/iii-engine-config/SKILL.md
skills/iii-error-handling/SKILL.md
skills/iii-sdk-reference/SKILL.md
skills/presentation/SKILL.md
skills/iii-getting-started/SKILL.md

Metadata

Files
0
Version
c6f6fde
Hash
22f4111c
Indexed
2026-08-20 17:17

Главная - Вики-сайт
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-08-30 18:03
浙ICP备14020137号-1 $Гость$