Skip to content

Reactive on/emit event system — language-level pub/sub #103

@gregwinn

Description

@gregwinn

Summary

Add language-level event pub/sub built on BEAM distribution. on :event_name do handlers auto-register as processes. Event.emit(:event_name, data) broadcasts across all nodes. No Redis/RabbitMQ needed — the BEAM IS the message bus.

Extends the existing roadmap item "Distributed Events" (#33) with concrete syntax.

Syntax

module OrderEvents
  on :order_placed do |order|
    Logger.info("New order: #{order.id}")
    Notification.send(order.user)
  end

  on :payment_failed, retry: 3 do |order|
    PaymentService.retry(order)
  end
end

# Anywhere in the app
Event.emit(:order_placed, order)

# Works across BEAM nodes automatically

Design

  • on keyword registers event handlers as supervised processes
  • Handlers are agents (agent keyword — stateful actors as a language primitive #102) under the hood — stateful, fault-tolerant
  • Event.emit broadcasts via pg (process groups) for distributed support
  • Options: retry, timeout, async (fire-and-forget vs acknowledged)

Dependencies

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/languageLanguage syntax and semanticsarea/runtimeRuntime modules (winn_runtime.erl, stdlib)enhancementNew feature or request

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions