Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

sequinstream/sequin-elixir

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sequin

A lightweight Elixir SDK for sending, receiving, and acknowledging messages in Sequin.

See the docs on Hex.

Installation

Sequin can be installed by adding sequin to your list of dependencies in mix.exs:

def deps do
  [
    {:sequin, "~> 0.1.0"}
  ]
end

Configuration

To use Sequin in your application, you'll need to configure it in your config.exs file. Add the following configuration:

# config/config.exs

config :sequin,
  base_url: System.get_env("SEQUIN_URL") || "http://localhost:7673"

By default, the Client is initialized using Sequin's default host and port in local development: http://localhost:7673

Usage

You'll predominantly use Sequin to send, receive, and acknowledge messages in Sequin:

# Define your stream and consumer
stream = "your-stream-name"
consumer = "your-consumer-name"

# Send a message
case Sequin.send_message(stream, "test.1", "Hello, Sequin!") do
  {:ok, %{published: 1}} ->
    IO.puts("Message sent successfully")

  {:error, error} ->
    IO.puts("Error sending message: #{Exception.message(error)}")
end

# Receive a message
with {:ok, %{message: message, ack_id: ack_id}} <- Sequin.receive_message(stream, consumer),
     :ok <- YourApp.process_message(message),
     :ok <- Sequin.ack_message(stream, consumer, ack_id) do
  IO.puts("Received and acked message: #{inspect(message)}")
else
  {:ok, nil} ->
    IO.puts("No messages available")

  {:error, error} ->
    IO.puts("Error: #{Exception.message(error)}")
end

Testing

To test code that uses Sequin, you can create temporary streams and consumers. Here's an example using ExUnit:

defmodule SequinTest do
  use ExUnit.Case
  alias Sequin

  @stream_name "test-stream-#{System.system_time(:second)}"
  @consumer_name "test-consumer-#{System.system_time(:second)}"

  setup do
    {:ok, _} = Sequin.create_stream(@stream_name)
    {:ok, _} = Sequin.create_consumer(@stream_name, @consumer_name, "test.>")

    on_exit(fn ->
      # Delete the consumer
      {:ok, _} = Sequin.delete_consumer(@stream_name, @consumer_name)

      # Delete the stream
      {:ok, _} = Sequin.delete_stream(@stream_name)
    end)

    :ok
  end

  # Create a new stream
  test "Stream and Consumer Lifecycle" do
    # Send a message
    assert {:ok, %{published: 1}} = Sequin.send_message(@stream_name, "test.1", "Hello, Sequin!")
    
    assert YourApp.handle_messages()
  end
end

Releases

Packages

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.