SlideShare ist ein Scribd-Unternehmen logo
1 von 19
Downloaden Sie, um offline zu lesen
Этот безумный, безумный

        Erlang
Структуры данных

● lists (proplists)
● sets
● dict
● gb_trees
● queue
● orddicts
● ordsets
● digraph
● array
OTP

● gen_server
● supervisor
● gen_fsm
● gen_event
gen_server
-module(mygenserv).
%-behaviour(gen_server).
-export([start_link/0]).
-export([init/1, handle_call/3, handle_cast/2]).
-export([sync_incr/0, async_incr/0, get_value/0]).

start_link() ->
   gen_server:start_link({local, ?MODULE}, ?MODULE, 0, []).

sync_incr() ->
  gen_server:call(?MODULE, incr).

async_incr() ->
  gen_server:cast(?MODULE, incr).

get_value() ->
  gen_server:call(?MODULE, get_value).

init(I) ->
   State = I,
   {ok, State}.

handle_call(get_value, _From, State) ->
  {reply, State, State}.
handle_call(incr, _From, State) ->
  {reply, State, State + 1}.

handle_cast(incr, State) ->
  {noreply, State + 1}.
supervisor
-module(myapp_sup).
-behaviour(supervisor).
-export([start_link/0]).
-export([init/1]).

start_link() ->
   supervisor:start_link({local, ?MODULE}, ?MODULE, []).

init(_) ->
   MyGenServSpec = {
                    mygenserv,
                    {mygenserv, start_link, []},
                    permanent,
                    5000,
                    worker,
                    [mygenserv]
                 },
   ChildSpecs = [MyGenServSpec]
   {ok, {one_for_one, 100, 1}, ChildSpecs}.
Хранилища и БД из коробки

● ETS – in-memory хранилище


● DETS – дисковое хранилище


● Mnesia – распределенная база данных на базе ETS&DETS
rebar

# git clone https://github.com/basho/rebar

# cd rebar

# make

# cp rebar ~/src/myproject

# cd ~/src/myproject
rebar.config

{deps,
   [
     {mochiweb, "v1.1",
        {git, "https://github.com/mochi/mochiweb", {branch, "master"}}
   ]
}.
{erl_opts, [debug_info]}.
# ./rebar create-app appid=myapp
# ./rebar get-deps
# ./rebar compile

# erl -pa ebin

1> application:start(myapp).
# rebar -c

clean                        Clean
compile                       Compile sources

create     template= [var=foo,...] Create skel based on template and vars
create-app [appid=myapp]            Create simple app skel
create-node [nodeid=mynode]           Create simple node skel
list-templates              List available templates

doc                          Generate Erlang program documentation

check-deps                       Display to be fetched dependencies
get-deps                       Fetch dependencies
update-deps                      Update fetched dependencies
delete-deps                     Delete fetched dependencies
list-deps                     List dependencies

generate     [dump_spec=0/1]           Build release with reltool

generate-upgrade previous_release=path Build an upgrade package

generate-appups previous_release=path Generate appup files

eunit       [suite=foo]         Run eunit [test/foo_tests.erl] tests
ct        [suite=] [case=]      Run common_test suites in ./test

xref                         Run cross reference analysis

help                         Show the program options
version                       Show version information
Mochiweb
      git clone https://github.com/mochi/mochiweb


● Легкий высокопроизводительный HTTP-сервер

● mochijson, mochijson2 – Erlang terms в JSON и обратно

● mochiglobal – эмуляция глобальных переменных

● reloader

● Мелкие полезные утилиты (mochinum, mochilists, etc)

● Есть форк с поддержкой websockets
mochiweb_http

mochiweb_http:start([
    {port, 8080},
    {ip, "0.0.0.0"},
    {loop, fun handle_request/1}
]).

handle_request(Req) ->
  Method = Req:get(method),
  Path = Req:get(path),
  GETParams = Req:parse_qs(),
  POSTParams = Req:parse_post(),
  Req:ok({"text/html", "ok"}).
mochijson2

Props = [
   {age, 10},
   {name, <<"Snoopy">>},
   {talents, [<<"jumping">>, <<"barking">>, <<"sleeping">>]}
],
Obj = {struct, Props},

JSON = mochijson2:encode(Obj),

Req:ok({"application/json", JSON}).

...

1> mochijson2:decode(<<"{"a": "test"}">>).
{struct, [{<<"a">>,<<"test">>}] }
reloader

# erl -pa ebin -s reloader

                             # vi src/myapp.erl
                             ...
                             # ./rebar compile

Reloading myapp ... ok.
Другие веб-сервера

● YAWS

● misultin (очень похож на mochiweb, но полегче и попроще)

● cowboy (похож на mochiweb и misultin, но использует не
  parametrized modules, а callbacks)
Riak
          git clone https://github.com/basho/riak

● riak_core – фреймворк для создания распределенных систем

● riak_error – ограничение размера error reports

● lager – фрймворк для логирования

● basho_bench – утилита для измерения производительности

● rebar
lager

lager:error("oh no!")
lager:warning("~s, ~s and ~s, oh my!", [lions, tigers, bears])

2011-07-19 18:02:02 [error] <0.31.0>@test2:start:8 oh no! 2011-07-19 18:02:02
[warning] <0.31.0>@test2:start:9 lions, tigers and bears, oh my!

2011-07-19 17:51:21 [error] <0.60.0> gen_server crash terminated with reason: no match
of right hand value {} in crash:handle_call/3
2011-07-19 17:51:22 [error] <0.60.0> CRASH REPORT Process crash with 0 neighbours
crashed with reason: no match of right hand value {} in crash:handle_call/3
RabbitMQ

 ● Используется для взаимодействия узлов
   распределенных систем
 ● Persistent messaging
 ● Полная поддержка протокола AMQP
 ● Кроссплатформенный
 ● Клиенты на всех популярных языках
 ● Используется в продакшне сотнями компаний (включая
   Echo и Mochi Media)

gen_bunny – библиотека для удобной работы с RabbitMQ в
эрланге
Agner

http://erlagner.org

На сегодняшний день 131 пакет

Weitere ähnliche Inhalte

Was ist angesagt?

Sequel — механизм доступа к БД, написанный на Ruby
Sequel — механизм доступа к БД, написанный на RubySequel — механизм доступа к БД, написанный на Ruby
Sequel — механизм доступа к БД, написанный на RubyAlexey Nayden
 
Batch processing in rails
Batch processing in railsBatch processing in rails
Batch processing in railssergeymoiseev
 
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15MoscowJS
 
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15MoscowJS
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПzfconfua
 
«Как перестать отлаживать асинхронные вызовы и начать жить»​
«Как перестать отлаживать асинхронные вызовы и начать жить»​«Как перестать отлаживать асинхронные вызовы и начать жить»​
«Как перестать отлаживать асинхронные вызовы и начать жить»​FDConf
 
PiterPy#3. DSL in Python. How and why?
PiterPy#3. DSL in Python. How and why?PiterPy#3. DSL in Python. How and why?
PiterPy#3. DSL in Python. How and why?Ivan Tsyganov
 
Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2Paul Klimov
 
Present saint-per3-by-pavel-vlasov
Present saint-per3-by-pavel-vlasovPresent saint-per3-by-pavel-vlasov
Present saint-per3-by-pavel-vlasovPavel Vlasov
 
YiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииYiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииPaul Klimov
 
10 - Web-технологии. MVC фреймворки (продолжение)
10 - Web-технологии. MVC фреймворки (продолжение)10 - Web-технологии. MVC фреймворки (продолжение)
10 - Web-технологии. MVC фреймворки (продолжение)Roman Brovko
 
Общая архитектура Yii2
Общая архитектура Yii2Общая архитектура Yii2
Общая архитектура Yii2Paul Klimov
 
PHP basic
PHP basicPHP basic
PHP basicNoveo
 
I tmozg js_school_jquery
I tmozg js_school_jqueryI tmozg js_school_jquery
I tmozg js_school_jqueryITmozg
 
Selenium: приемы работы
Selenium: приемы работыSelenium: приемы работы
Selenium: приемы работыPaul Stashevsky
 
Программирование Linux
Программирование LinuxПрограммирование Linux
Программирование LinuxAnthony Shoumikhin
 

Was ist angesagt? (19)

Sequel — механизм доступа к БД, написанный на Ruby
Sequel — механизм доступа к БД, написанный на RubySequel — механизм доступа к БД, написанный на Ruby
Sequel — механизм доступа к БД, написанный на Ruby
 
Perl – жив?!
Perl – жив?!Perl – жив?!
Perl – жив?!
 
Batch processing in rails
Batch processing in railsBatch processing in rails
Batch processing in rails
 
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
 
Coroutines
CoroutinesCoroutines
Coroutines
 
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОП
 
«Как перестать отлаживать асинхронные вызовы и начать жить»​
«Как перестать отлаживать асинхронные вызовы и начать жить»​«Как перестать отлаживать асинхронные вызовы и начать жить»​
«Как перестать отлаживать асинхронные вызовы и начать жить»​
 
PiterPy#3. DSL in Python. How and why?
PiterPy#3. DSL in Python. How and why?PiterPy#3. DSL in Python. How and why?
PiterPy#3. DSL in Python. How and why?
 
Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2
 
Present saint-per3-by-pavel-vlasov
Present saint-per3-by-pavel-vlasovPresent saint-per3-by-pavel-vlasov
Present saint-per3-by-pavel-vlasov
 
YiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииYiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляции
 
Comma
CommaComma
Comma
 
10 - Web-технологии. MVC фреймворки (продолжение)
10 - Web-технологии. MVC фреймворки (продолжение)10 - Web-технологии. MVC фреймворки (продолжение)
10 - Web-технологии. MVC фреймворки (продолжение)
 
Общая архитектура Yii2
Общая архитектура Yii2Общая архитектура Yii2
Общая архитектура Yii2
 
PHP basic
PHP basicPHP basic
PHP basic
 
I tmozg js_school_jquery
I tmozg js_school_jqueryI tmozg js_school_jquery
I tmozg js_school_jquery
 
Selenium: приемы работы
Selenium: приемы работыSelenium: приемы работы
Selenium: приемы работы
 
Программирование Linux
Программирование LinuxПрограммирование Linux
Программирование Linux
 

Ähnlich wie Erlang tasty & useful stuff

Все, что вы хотели знать о Rebar, но ленились прочитать
Все, что вы хотели знать о Rebar, но ленились прочитатьВсе, что вы хотели знать о Rebar, но ленились прочитать
Все, что вы хотели знать о Rebar, но ленились прочитатьYuri Zhloba
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорьdrupalconf
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов ИгорьPVasili
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Nikita Borzykh
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй этоRoman Dvornov
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полнойОмские ИТ-субботники
 
Web осень 2013 лекция 5
Web осень 2013 лекция 5Web осень 2013 лекция 5
Web осень 2013 лекция 5Technopark
 
Cтрах и ненависть в MongoDB
Cтрах и ненависть в MongoDBCтрах и ненависть в MongoDB
Cтрах и ненависть в MongoDBDmitry Viskov
 
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Ontico
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Oleksii Okhrymenko
 
Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Ontico
 
Scala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application DevelopmentScala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application DevelopmentAnton Kirillov
 
Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и MinkBehat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Minktyomo4ka
 
Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Mikhail Davydov
 

Ähnlich wie Erlang tasty & useful stuff (20)

Все, что вы хотели знать о Rebar, но ленились прочитать
Все, что вы хотели знать о Rebar, но ленились прочитатьВсе, что вы хотели знать о Rebar, но ленились прочитать
Все, что вы хотели знать о Rebar, но ленились прочитать
 
Спецификация WSGI (PEP-333)
Спецификация WSGI (PEP-333)Спецификация WSGI (PEP-333)
Спецификация WSGI (PEP-333)
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
 
Mojolicious
MojoliciousMojolicious
Mojolicious
 
Web осень 2013 лекция 5
Web осень 2013 лекция 5Web осень 2013 лекция 5
Web осень 2013 лекция 5
 
Cтрах и ненависть в MongoDB
Cтрах и ненависть в MongoDBCтрах и ненависть в MongoDB
Cтрах и ненависть в MongoDB
 
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2
 
бегун
бегунбегун
бегун
 
UWDC 2013, Yii2
UWDC 2013, Yii2UWDC 2013, Yii2
UWDC 2013, Yii2
 
Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)
 
бегун
бегунбегун
бегун
 
Scala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application DevelopmentScala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application Development
 
Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и MinkBehat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Mink
 
Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Introduction in Node.js (in russian)
Introduction in Node.js (in russian)
 

Erlang tasty & useful stuff

  • 2. Структуры данных ● lists (proplists) ● sets ● dict ● gb_trees ● queue ● orddicts ● ordsets ● digraph ● array
  • 4. gen_server -module(mygenserv). %-behaviour(gen_server). -export([start_link/0]). -export([init/1, handle_call/3, handle_cast/2]). -export([sync_incr/0, async_incr/0, get_value/0]). start_link() -> gen_server:start_link({local, ?MODULE}, ?MODULE, 0, []). sync_incr() -> gen_server:call(?MODULE, incr). async_incr() -> gen_server:cast(?MODULE, incr). get_value() -> gen_server:call(?MODULE, get_value). init(I) -> State = I, {ok, State}. handle_call(get_value, _From, State) -> {reply, State, State}. handle_call(incr, _From, State) -> {reply, State, State + 1}. handle_cast(incr, State) -> {noreply, State + 1}.
  • 5. supervisor -module(myapp_sup). -behaviour(supervisor). -export([start_link/0]). -export([init/1]). start_link() -> supervisor:start_link({local, ?MODULE}, ?MODULE, []). init(_) -> MyGenServSpec = { mygenserv, {mygenserv, start_link, []}, permanent, 5000, worker, [mygenserv] }, ChildSpecs = [MyGenServSpec] {ok, {one_for_one, 100, 1}, ChildSpecs}.
  • 6. Хранилища и БД из коробки ● ETS – in-memory хранилище ● DETS – дисковое хранилище ● Mnesia – распределенная база данных на базе ETS&DETS
  • 7. rebar # git clone https://github.com/basho/rebar # cd rebar # make # cp rebar ~/src/myproject # cd ~/src/myproject
  • 8. rebar.config {deps, [ {mochiweb, "v1.1", {git, "https://github.com/mochi/mochiweb", {branch, "master"}} ] }. {erl_opts, [debug_info]}.
  • 9. # ./rebar create-app appid=myapp # ./rebar get-deps # ./rebar compile # erl -pa ebin 1> application:start(myapp).
  • 10. # rebar -c clean Clean compile Compile sources create template= [var=foo,...] Create skel based on template and vars create-app [appid=myapp] Create simple app skel create-node [nodeid=mynode] Create simple node skel list-templates List available templates doc Generate Erlang program documentation check-deps Display to be fetched dependencies get-deps Fetch dependencies update-deps Update fetched dependencies delete-deps Delete fetched dependencies list-deps List dependencies generate [dump_spec=0/1] Build release with reltool generate-upgrade previous_release=path Build an upgrade package generate-appups previous_release=path Generate appup files eunit [suite=foo] Run eunit [test/foo_tests.erl] tests ct [suite=] [case=] Run common_test suites in ./test xref Run cross reference analysis help Show the program options version Show version information
  • 11. Mochiweb git clone https://github.com/mochi/mochiweb ● Легкий высокопроизводительный HTTP-сервер ● mochijson, mochijson2 – Erlang terms в JSON и обратно ● mochiglobal – эмуляция глобальных переменных ● reloader ● Мелкие полезные утилиты (mochinum, mochilists, etc) ● Есть форк с поддержкой websockets
  • 12. mochiweb_http mochiweb_http:start([ {port, 8080}, {ip, "0.0.0.0"}, {loop, fun handle_request/1} ]). handle_request(Req) -> Method = Req:get(method), Path = Req:get(path), GETParams = Req:parse_qs(), POSTParams = Req:parse_post(), Req:ok({"text/html", "ok"}).
  • 13. mochijson2 Props = [ {age, 10}, {name, <<"Snoopy">>}, {talents, [<<"jumping">>, <<"barking">>, <<"sleeping">>]} ], Obj = {struct, Props}, JSON = mochijson2:encode(Obj), Req:ok({"application/json", JSON}). ... 1> mochijson2:decode(<<"{"a": "test"}">>). {struct, [{<<"a">>,<<"test">>}] }
  • 14. reloader # erl -pa ebin -s reloader # vi src/myapp.erl ... # ./rebar compile Reloading myapp ... ok.
  • 15. Другие веб-сервера ● YAWS ● misultin (очень похож на mochiweb, но полегче и попроще) ● cowboy (похож на mochiweb и misultin, но использует не parametrized modules, а callbacks)
  • 16. Riak git clone https://github.com/basho/riak ● riak_core – фреймворк для создания распределенных систем ● riak_error – ограничение размера error reports ● lager – фрймворк для логирования ● basho_bench – утилита для измерения производительности ● rebar
  • 17. lager lager:error("oh no!") lager:warning("~s, ~s and ~s, oh my!", [lions, tigers, bears]) 2011-07-19 18:02:02 [error] <0.31.0>@test2:start:8 oh no! 2011-07-19 18:02:02 [warning] <0.31.0>@test2:start:9 lions, tigers and bears, oh my! 2011-07-19 17:51:21 [error] <0.60.0> gen_server crash terminated with reason: no match of right hand value {} in crash:handle_call/3 2011-07-19 17:51:22 [error] <0.60.0> CRASH REPORT Process crash with 0 neighbours crashed with reason: no match of right hand value {} in crash:handle_call/3
  • 18. RabbitMQ ● Используется для взаимодействия узлов распределенных систем ● Persistent messaging ● Полная поддержка протокола AMQP ● Кроссплатформенный ● Клиенты на всех популярных языках ● Используется в продакшне сотнями компаний (включая Echo и Mochi Media) gen_bunny – библиотека для удобной работы с RabbitMQ в эрланге