2017-05-09 1 views
1

私はgenstageアプリケーションの例があり、消費者にはredisとの接続を使用する必要があります。そして、私はこの接続をhandle_eventsに渡す必要があるのか​​分かりません。エリクシールの遺伝子操作の消費者にredis接続を使用する

私が書く場合:

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

次に接続がhandle_events関数内で呼ばれるたびに、新しい接続を作成します。

どうすればこの問題を解決できますか?

答えて

0

あなたはこのような何か、あなたはGenServer INにするのと同じように(GenStage消費者のstateconnを保つことができます。

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 
関連する問題