Current section
Files
Jump to
Current section
Files
src/eredis_streams_test_handler.erl
-module(eredis_streams_test_handler).
-behaviour(eredis_stream_handler).
-include_lib("eredis_streams/include/telemetry.hrl").
-export([init/1, handle_messages/3, handle_failover/3, handle_info/2]).
init(_Params) -> ok.
handle_messages(Conn, Messages, Config) ->
_ = do(Conn, Messages, Config),
#{processed => length(Messages)}.
handle_failover(Conn, Messages, Config) ->
_ = do(Conn, Messages, Config),
#{processed => length(Messages)}.
handle_info(_Info, State) -> {noreply, State}.
%%%===================================================================
%%% helpers
%%%===================================================================
do(_, [], _) -> ok;
do(Conn, [Message | Messages], #{outstream := #{name := OutStream, pool := OutPool}} = Config) ->
% 1. get message payload
Payload = eredis_streams:get_message_payload(Message),
% 2. push message to out stream
{ok, _} = eredis_streams:push_message(OutPool, OutStream, Payload),
% 3. xack message with auto xdel
ok = eredis_streams:xack_message(Conn, Message),
% 4. emit telemetry event for each message (optional)
?EXEC_TELEMETRY(
?EREDIS_STREAMS_WORKER_HANDLE_MESSAGE,
#{},
Conn#{message => Message, config => Config}
),
do(Conn, Messages, Config).