Current section
Files
Jump to
Current section
Files
lib/backstage.ex
defmodule Backstage do
use Broadway
alias Backstage.EventProducer
alias Broadway.Message
# TODO: Should the message contain a command or an event?
@default_config [
name: __MODULE__,
producer: [
module: {EventProducer, []},
transformer: {__MODULE__, :transform, []}
],
processors: [
default: [concurrency: 10]
],
batchers: [
default: [concurrency: 2, batch_size: 5]
]
]
def start_link(opts \\ []) do
Broadway.start_link(__MODULE__, Keyword.merge(@default_config, opts))
end
def transform(event, _opts) do
%Message{
data: event,
acknowledger: {__MODULE__, :ack_id, :ack_data}
}
end
@impl Broadway
def handle_message(_processor, %Message{} = message, _context) do
message
end
@impl Broadway
def handle_batch(_batcher, messages, _batch_info, _context) do
messages
end
@impl Broadway
def handle_failed(messages, _context) do
messages
end
def ack(:ack_id, _successful, _failed) do
:ok
end
end