https://github.com/sequinstream/sequin-elixir
Sequin Elixir Client
https://github.com/sequinstream/sequin-elixir
Last synced: 3 months ago
JSON representation
Sequin Elixir Client
- Host: GitHub
- URL: https://github.com/sequinstream/sequin-elixir
- Owner: sequinstream
- License: mit
- Created: 2024-07-26T01:25:25.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-07-29T21:50:06.000Z (almost 2 years ago)
- Last Synced: 2025-10-21T17:51:43.282Z (7 months ago)
- Language: Elixir
- Size: 25.4 KB
- Stars: 7
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Sequin
A lightweight Elixir SDK for sending, receiving, and acknowledging messages in [Sequin](https://github.com/sequinstream/sequin).
See the [docs on Hex](https://hexdocs.pm/sequin_client/Sequin.html).
## Installation
Sequin can be installed by adding `sequin` to your list of dependencies in `mix.exs`:
```elixir
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:
```elixir
# 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](https://github.com/sequinstream/sequin?tab=readme-ov-file#messages) in Sequin:
```elixir
# 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:
```elixir
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
```