lightspeed/pubsub

Deterministic PubSub abstraction for channel fanout.

Types

PubSub adapter model.

pub type Adapter {
  SingleNode
  ClusterReady(node_id: String, cluster: String)
}

Constructors

  • SingleNode
  • ClusterReady(node_id: String, cluster: String)

Broker

opaque

PubSub broker state.

pub opaque type Broker(message)

One routed delivery.

pub type Delivery(message) {
  Delivery(
    topic: String,
    subscriber_id: String,
    message: message,
  )
}

Constructors

  • Delivery(topic: String, subscriber_id: String, message: message)

Values

pub fn adapter(broker: Broker(message)) -> Adapter

Broker adapter.

pub fn adapter_label(adapter: Adapter) -> String

Stable adapter label.

pub fn delivery_message(delivery: Delivery(message)) -> message

Message payload for one delivery.

pub fn delivery_subscriber(delivery: Delivery(message)) -> String

Subscriber id for one delivery.

pub fn delivery_topic(delivery: Delivery(message)) -> String

Topic for one delivery.

pub fn new_cluster_ready(
  node_id: String,
  cluster: String,
) -> Broker(message)

New cluster-ready broker.

pub fn new_single_node() -> Broker(message)

New single-node broker.

pub fn publish(
  broker: Broker(message),
  topic: String,
  message: message,
) -> #(Broker(message), List(Delivery(message)))

Publish one message to one topic.

pub fn subscribe(
  broker: Broker(message),
  topic: String,
  subscriber_id: String,
) -> Broker(message)

Subscribe one subscriber to one topic.

pub fn subscriber_count(
  broker: Broker(message),
  topic: String,
) -> Int

Number of subscribers for one topic.

pub fn subscribers(
  broker: Broker(message),
  topic: String,
) -> List(String)

Subscribers for one topic in stable join order.

pub fn topic_labels(broker: Broker(message)) -> List(String)

Stable topic labels for tests and logs.

pub fn unsubscribe(
  broker: Broker(message),
  topic: String,
  subscriber_id: String,
) -> Broker(message)

Unsubscribe one subscriber from one topic.

Search Document