This project is a Redis adapter for Yggdrasil
publisher/subscriber.
The following example uses Redis adapter to distribute messages:
iex(1)> channel = %Yggdrasil.Channel{name: "some_channel", adapter: :redis}
iex(2)> Yggdrasil.subscribe(channel)
iex(3)> flush()
{:Y_CONNECTED, %Yggdrasil.Channel{(...)}}
and to publish a message for the subscribers:
iex(4)> Yggdrasil.publish(channel, "message")
iex(5)> flush()
{:Y_EVENT, %Yggdrasil.Channel{(...)}, "message"}
When the subscriber wants to stop receiving messages, then it can unsubscribe from the channel:
iex(6)> Yggdrasil.unsubscribe(channel)
iex(7)> flush()
{:Y_DISCONNECTED, %Yggdrasil.Channel{(...)}}
The Redis adapter has the following rules:
- The
adapter
name is identified by the atom:redis
. - The channel
name
must be a string. - The
transformer
must encode to a string. From thetransformer
s provided it defaults to:default
, but:json
can also be used. - Any
backend
can be used (by default is:default
).
The following is an example of a valid channel for both publishers and subscribers:
%Yggdrasil.Channel{
name: "redis_channel_name",
adapter: :redis,
transformer: :json
}
It will expect valid JSONs from Redis and it will write valid JSONs in Redis.
Uses the list of options for Redix
, but the more relevant optuons are shown
below:
hostname
- Redis hostname (defaults to"localhost"
).port
- Redis port (defaults to6379
).password
- Redis password (defaults to""
).
The following shows a configuration with and without namespace:
# Without namespace
config :yggdrasil,
redis: [hostname: "redis.zero"]
# With namespace
config :yggdrasil, RedisOne,
redis: [
hostname: "redis.one",
port: 1234
]
Also the options can be provided as OS environment variables. The available variables are:
YGGDRASIL_REDIS_HOSTNAME
or<NAMESPACE>_YGGDRASIL_REDIS_HOSTNAME
.YGGDRASIL_REDIS_PORT
or<NAMESPACE>_YGGDRASIL_REDIS_PORT
.YGGDRASIL_REDIS_PASSWORD
or<NAMESPACE>_YGGDRASIL_REDIS_PASSWORD
.YGGDRASIL_REDIS_DATABASE
or<NAMESPACE>_YGGDRASIL_REDIS_DATABASE
.
where <NAMESPACE>
is the snakecase of the namespace chosen e.g. for the
namespace RedisTwo
, you would use REDIS_TWO
as namespace in the OS
environment variable.
Using this Redis adapter with Yggdrasil
is a matter of adding the available
hex package to your mix.exs
file e.g:
def deps do
[{:yggdrasil_redis, "~> 4.1"}]
end
A docker-compose.yml
file is provided with the project. If you don't have a
Redis database, but you do have Docker installed, then just do:
$ docker-compose up --build
And in another shell run:
$ mix deps.get
$ mix test
Redix.PubSub
: Redis pubsub.
Alexander de Sousa.
Yggdrasil
is released under the MIT License. See the LICENSE file for further
details.