您可以将conn 保留在GenStage 消费者的state 中(就像您在GenServer 中一样,如下所示:
defmodule C do
use GenStage
def start_link() do
GenStage.start_link(C, :ok)
end
def init(:ok) do
{:ok, conn} = Redis.start_link(...)
{:consumer, conn}
end
def handle_events(events, _from, conn) do
Redix.command!(conn, ...)
{:noreply, [], conn}
end
end
这里我在创建消费者时创建连接。如果需要,您还可以创建更高的连接并将其传递给此连接,如下所示:
defmodule C do
use GenStage
def start_link(conn) do
GenStage.start_link(C, conn)
end
def init(conn) do
{:consumer, conn}
end
def handle_events(events, _from, conn) do
Redix.command!(conn, ...)
{:noreply, [], conn}
end
end