- Notifications
You must be signed in to change notification settings - Fork1
Redis adapter for Yggdrasil
License
gmtprime/yggdrasil_redis
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
This project is a Redis adapter forYggdrasil
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 unsubscribefrom 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 providedit 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 andsubscribers:
%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 forRedix
, but the more relevant optuons are shownbelow:
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 namespaceconfig:yggdrasil,redis:[hostname:"redis.zero"]# With namespaceconfig:yggdrasil,RedisOne,redis:[hostname:"redis.one",port:1234]
Also the options can be provided as OS environment variables. The availablevariables 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 thenamespaceRedisTwo
, you would useREDIS_TWO
as namespace in the OSenvironment variable.
Using this Redis adapter withYggdrasil
is a matter of adding the availablehex package to yourmix.exs
file e.g:
defdepsdo[{:yggdrasil_redis,"~> 4.1"}]end
Adocker-compose.yml
file is provided with the project. If you don't have aRedis 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 furtherdetails.
About
Redis adapter for Yggdrasil