エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

Redis Pub/Sub in Elixir 覚書

Exredis を使っています。

defmodule Subscribe do
  def sub(channel) do
    {:ok ,client_sub} = Exredis.Sub.start_link
    pid = Kernel.self

    Exredis.Sub.subscribe(client_sub, channel, fn msg ->
      send(pid, msg)
    end)

    receive do
      {:subscribed, ^channel, _pid} ->
        IO.puts "OK"
    end

    loop(channel)
  end

  def loop(channel) do
    receive do
      {:message, ^channel, message, _pid} ->
        IO.puts message
        loop(channel)
    end
  end
end

どこかで起動しておく。Redis も起動しておく。

> Subscribe.sub("test")
OK


Pub 。

> import Exredis
> Exredis.Api.publish(client, "test", "Hello")


こんな風に表示されます。

> Subscribe.sub("test")
OK
Hello


Ruby でも。

require 'redis'

r = Redis.new
r.publish('test', 'Hello')
> Subscribe.sub("test")
OK
Hello
Hello