2017-05-09 5 views
1

ich habe ein beispiel für genstage anwendung, und in seinen verbrauchern muss ich eine verbindung mit redis verwenden. Und ich verstehe nicht, wie ich diese Verbindung an handle_events weitergeben muss.benutze redis verbindung in elixir genstage verbraucher

Wenn ich schreiben:

defp connection do 
    {:ok, conn} = Redix.start_link(host: "0.0.0.0", port: 6379) 
    conn 
    end 

Dann wird die Verbindung jedes Mal in der handle_events Funktion aufgerufen wird, wird es eine neue Verbindung erstellen.

Wie kann ich dieses Problem lösen?

Antwort

0

können Sie die conn halten im state des GenStage Verbraucher (wie Sie in einem GenServer, so etwas zu würde:

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 

hier die Verbindung Ich schaffe, wenn der Verbraucher erstellt wird. Sie können die Verbindung auch höher oben erstellen und sie an diese weiterleiten, wenn Sie möchten:

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 
Verwandte Themen