Хитрость заключается в использовании ссылки в качестве токена для репликации:
replicate() ->
{ok, Token} = db:ask_replicate(...),
receive
{replication_completed, Token} ->
ok
end
, где Token
создается с вызовом make_ref()
.Поскольку никакое другое сообщение не будет соответствовать Token
, вы в безопасности.Другие сообщения будут помещены в почтовый ящик для последующего изучения.
Однако в приведенном выше решении не учитываются сбои процесса.Вам также необходим монитор на сервере БД.Самый простой способ получить правильный шаблон - это позволить медиатору быть gen_server
.Кроме того, вы можете прочитать главу в LearnYouSomeErlang: http://learnyousomeerlang.com/what-is-otp#the-basic-server посмотреть на синхронный вызов в kitty_server
.