ืืื ืืขืจ ืคืึทืจืืึทื ืืขื ืืืื
- ืืขืื-ืขื ืืคืขืจ
- ืืขืื-ืืฉืื ืงืขื ืขื ืืคืขืจ
- ืขื ืืคืขืจ ืืื ืืงืฉื
- ืึทืจืืืกืืขืื-ืึทืืึธื ืืจื
- ืื ืืืขืจืืื ืึทืจืืืกืืขืื-ืึทืืึธื ืืจื
- ืึทืจืืขื ืคืึทืจืฉืคึผืจืืืืื ื
SOA, MSA ืืื ืืขืกืืืืฉืื ื
SOA, MSA ืืขื ืขื ืกืืกืืขื ืึทืจืงืึทืืขืงืืฉืขืจื ืืืึธืก ืืขืคืื ืืจื ืื ืึผืืืื ืคึฟืึทืจ ืื ืื ืกืืกืืขืืขื, ืืฉืขืช ืืขืกืืืืฉืื ื ืืื ืคึผืจืืืืืืืื ืคึฟืึทืจ ืืืืขืจ ืืืคึผืืึทืืขื ืืืืฉืึทื.
ืืื ืืึธื ื ืืฉื ืืืขืื ืฆื ืืขืืขืจื ืืขื ืึธืืขืจ ืึทื ืกืืกืืขื ืึทืจืงืึทืืขืงืืฉืขืจ. ืืื ืืื ืคึฟืึทืจ ื ืืฆื ืื ืืขืจืกื ืขืคืขืงืืืื ืืื ื ืืฆืืง ืคึผืจืึทืงืืืกืื ืคึฟืึทืจ ืึท ืกืคึผืขืฆืืคืืฉ ืคึผืจืืืขืงื ืืื ืืขืฉืขืคื. ืืืขืืืขืจ ืคึผืึทืจืึทืืืื ืืืจ ืงืืืึทืื, ืขืก ืืื ืืขืกืขืจ ืฆื ืฉืึทืคึฟื ืกืืกืืขื ืืืึทืงืก ืืื ืึทื ืืืื ืืืืฃ ืื ืืื ืืงืก-ืืืขื: ืงืึทืืคึผืึธืื ืึทื ืฅ ืืื ืืื ืืืึทื ืงืึทื ืขืงืืืืืืื, ืคืึทืจืึทื ืืืืึธืจืืืขื ืคึฟืึทืจ ืืืื ืขื ืืืืื. ืึทืคึผื ืืขืืืึธืืก ืืืจืืคืืจื ืื ืกืืืคึผืืึทืกื ืืขืืืขื ืึทืงืฉืึทื ื ืืื ืขื ืืืืื.
ืืขืกืืืืฉืื ื ืืื, ืืื ืืขืจ ื ืึธืืขื ืกืึทืืืืฉืขืก, ืึท ืึธื ืืึธื ืืขืงืืขืจ. ืืขืจ ืืืืคึผื ืฆืื ืืื ืฆื ืืึทืงืืืขื ืืื ืฉืืงื ืึทืจืืืงืืขื. ืขืก ืืื ืคืึทืจืึทื ืืืืึธืจืืืขื ืคึฟืึทืจ ืื ืื ืืขืจืคืืืกืื ืคึฟืึทืจ ืฉืืงื ืืื ืคึฟืึธืจืืึทืฆืืข, ืื ืคืึธืจืืืจืื ื ืคืื ืืึทืืืฉืืงืึทื ืืฉืึทื ืึทืื ืคึฟืึทืจ ืืจืึทื ืกืืืืื ื ืืื ืคึฟืึธืจืืึทืฆืืข ืืื ืื ืกืืกืืขื, ืจืืืื ื ืืื ืืึทืืึทื ืกืื ื, ืืื ืืขืืื ื ืืื ืฉืืื ืืึทื ืืืื ื ืืืืฃ ืื ืกืืกืืขื ืืืจืื.
ืื ืืขืกืืืืฉืื ื ืืืจ ืืขื ืขื ืืขืืืขืืึธืคึผืื ื ืืื ื ืืฉื ืืจืืื ื ืฆื ืงืึธื ืงืืจืืจื ืืื ืึธืืขืจ ืคืึทืจืืืึทืื rabbitmq. ืืืึทื ืืืืคึผื ืคึฟืขืึดืงืืืื:
- ืคืึทืจืฉืคึผืจืืืืื ื.
ืืืขืงืกื ืคืื ืงืื ืงืขื ืขื ืืืื ืืืฉืืคื ืืืืฃ ืึทืืข ืงื ืืื ื ืึธืืื, ืืื ื ืึธืขื ื ืืื ืืขืืืขื ืฆื ืื ืงืึธื ืืืึธืก ื ืืฆื ืืื. - ืคึผืึทืฉืืขืก.
ืคืึธืงืืก ืืืืฃ ืืื ืึทืืืืืื ื ืืึธืืืขืจืคึผืืึทืืข ืงืึธื ืืื ืื ืคืื ื ืืฆื. - ืืขืกืขืจ ืคืึธืจืฉืืขืืื ื.
ืืืจ ืืขื ืขื ื ืืฉื ืืจืืื ื ืฆื ืืืืขืจืืืจื ืื ืคืึทื ืืงืฉืึทื ืึทืืืื ืคืื rabbitmq, ืึธืืขืจ ืืืืืคึผืื ืงื ืืืืื ืื ืึทืจืงืึทืืขืงืืฉืขืจืึทื ืืื ืึทืจืืืขืจืคืืจื ืฉืืืืข, ืืืึธืก ืืืจ ืคึผืึทืกืืง ืืื ืื ืึธืืคึผ ืืื ืคึผืฉืื ืืื ืืขืืืขื, ืืื ืึทืืืืืื ื ืงืึธืก. - ืืืืืืงืืื.
ืืขืืขืจ ืืื ืกื ืงืขื ืขื ืคืึทืจืืื ืื ืคืืืข ืืืขืงืกื ืืขืืคึผืืึทืืขืก. - ืจืืืืืืึทื ืก ืืืจื ืคึผืืึทื.
- ืกืงืึทืืึทืืืืืื.
ืืขืกืืืืฉืื ื ืืืืงืกื ืืื ืื ืึทืคึผืืึทืงืืืฉืึทื. ืืื ืื ืืึทืกืข ืื ืงืจืืกืื, ืืืจ ืงืขื ืขื ืึทืจืืืขืจืคืืจื ืื ืืืขืงืกื ืืืืืื ืฆื ืืืื ืืืฉืื ืขื.
ืืึทืืขืจืงืื ื. ืืื ืืขืจืืื ืขื ืคืื ืงืึธื ืึธืจืืึทื ืืืึทืฆืืข, ืืขืืึท-ืคึผืจืึทืืืฉืขืงืก ืืขื ืขื ืืขืืื ื ืคึผืึทืกืืง ืคึฟืึทืจ ืงืึธืืคึผืืขืงืก ืขืจืืึทื ื / ืขืืืงืกืืจ ืกืืกืืขืืขื. ืึทืืข ืคึผืจืืืขืงื ืงืึธื ืืื ืืืื ืืื ืืืื ืจืืคึผืึทืืึทืืึธืจื - ืึท ืฉืืจืขื ืคึผืจืืืขืงื. ืืื ืืขืจ ืืขืืืืงืขืจ ืฆืืื, ืืืงืจืึธ ืกืขืจืืืืกืขืก ืืขื ืขื ืืึทืงืกืืืึทืื ืืคืืขืืื ืืขืจื ืืื ืืืจืืคืืจื ืคึผืฉืื ืึทืคึผืขืจืืืฉืึทื ื ืืืึธืก ืืขื ืขื ืคืึทืจืึทื ืืืืึธืจืืืขื ืคึฟืึทืจ ืึท ืืึทืืื ืืขืจ ืขื ืืืื. ืืื ืืขื ืฆืืืึทื ื, ืขืก ืืื ืืจืื ื ืฆื ืืืึทื ืขื ืื ืึทืคึผื ืคืื ืื ืืื ืฆืข ืกืืกืืขื, ืขืก ืืื ืืจืื ื ืฆื ืืึทืื ืขื ืืขืจืื ืืขื, ืขืก ืืื ืืึทืงืืืขื ืฆื ืฉืจืืึทืื ืึทืคึผืึทืจืึทื ืืื ืื ืืึทืืจืืืฉืึทื ืืขืกืฅ.
ืื ืกืืกืืขื ืงืึทืืคึผืึธืื ืึทื ืฅ ืื ืืขืจืึทืงื ืืืืึทื ืึธืืขืจ ืืืจื ืึท ืืขืงืืขืจ. ืคึฟืื ืึท ืืขืกืืืืฉืื ื ืคึผืขืจืกืคึผืขืงืืืื, ืืขืืขืจ ืืื ืกื ืืื ืขืืืขืืข ืืขืื ืคืืืืึทื:
- ืกืขืจืืืืก ืื ืืืืึทืืืืึทืืืึธื.
ืืื ืืขื ืืื ืข, ืืขืจ ืคึผืจืึธืฆืขืก ืขืงืกืึทืงืืืืื ื ืื ืืื ืกื ืืื ืืืึทื ืืืคึผืขื ืืึทื ืกืื ืืขื ืขื ืงืึทื ืคืืืืขืจื ืืื ืืึธื ืืฉื. - ืฉืืคื ืึท ืืืขืงืกื ืคืื ื.
ืื ืืื ืกื ืงืขื ืขื ื ืืฆื ืึท ืกืืึทืืืง ืืืขืงืกื ืคืื ื ืกืคึผืขืกืืคืืขื ืืื ืื ื ืึธืืข ืงืึทื ืคืืืืขืจืืืฉืึทื, ืึธืืขืจ ืืึทืื ืืืขืงืกื ืืืืืื ืืื ืึทืืืงืึทืืื. - ืกืขืจืืืืก ืจืขืืืกืืจืึทืฆืืข.
ืึผืื ืื ืกืขืจืืืืก ืืึธื ืืื ืขื ืจืืงืืืขืก, ืขืก ืืืื ืืืื ืจืขืืืกืืจืืจื ืืื ืืขืจ ืืืขืงืกื ืคืื ื. - ื ืึธืจืืึทื ืคืึทื ืืงืฉืึทื ืื ื.
ืื ืืื ืกื ืืจืืื ื ืืฆืืง ืึทืจืืขื. - ืฉืึทืืืึทืื.
ืขืก ืืขื ืขื 2 ืืืืคึผืก ืคืื ืฉืึทืืืึทืื ืืขืืืขื: ื ืึธืจืืึทื ืืื ื ืืืืคืึทื. ืืขืฉืึทืก ื ืึธืจืืึทื ืึธืคึผืขืจืึทืฆืืข, ืื ืืื ืกื ืืื ืืืกืงืึทื ืขืงืืื ืคืื ืื ืืืขืงืกื ืคืื ื ืืื ืกืืึทืคึผืก. ืืื ื ืืืืคืึทื ืกืืืืึทืืืึธื ืก, ืืขืกืืืืฉืื ื ืขืงืกืึทืงืืืฅ ืืืื ืขืจ ืคืื ืื ืคืืืืึธืืืขืจ ืกืงืจืืคึผืก.
ืขืก ืงืืงื ืืึทื ืฅ ืงืึธืืคึผืืืฆืืจื, ืึธืืขืจ ืื ืงืึธื ืืื ื ืืฉื ืึทืืื ืกืงืขืจื. ืงืึธืืขืงืก ืืืืฉืคืืื ืืื ืืึทืืขืจืงืื ืืขื ืืืขื ืืืื ืืขืืขืื ืืื ืื ืึทื ืึทืืืกืืก ืคืื ืืขืืคึผืืึทืืขืก ืึท ืืืกื ืฉืคึผืขืืขืจ.
ืืงืกืืฉืืื ืืืฉืื
ืขืงืกืืฉืึทื ืืข ืคืื ื ืืื ืึท ืืขืกืืืืฉืื ื ืคึผืจืึธืฆืขืก ืืืึธืก ืืืคึผืืึทืืึทื ืฅ ืื ืืึธืืืง ืคืื ืื ืืขืจืึทืงืฉืึทื ืืื ืงืึทืืคึผืึธืื ืึทื ืฅ ืืื ืื ืืขืกืืืืฉืื ื ืืืกืืขืจ. ืืื ืึทืืข ืื ืืืืฉืคืืื ืืขืจืืื ืื ืืื ืื, ืื ืงืึทืืคึผืึธืื ืึทื ืฅ ืื ืืขืจืึทืงื ืืืจื ืืืขืงืกื ืืืืืื, ืื ืงืึธืืืื ืึทืฆืืข ืคืื โโืืืึธืก ืคืืจืืขื ืืขืกืืืืฉืื ื.
ืึธื ืืึธื ืืืขืงืกื ืคึผืึทืืขืจื ื (ืืขืคึผืก)
ืืืึธืืืึทืื, ืืืขืงืกื ืคึผืึทืืขืจื ื ืงืขื ืขื ืืืื ืฆืขืืืืื ืืื ืฆืืืื-ืืืขื ืืื ืืืื-ืืืขื. ืื ืขืจืฉืืข ืืืื ืขื ืึท ืขื ืืคืขืจ ืฆื ืึท ืื ืงืึทืืื ื ืึธื ืืึธื, ืื ืืขืฆืืข ืืึธื ื ืื. ื ืงืืึทืกืืฉ ืืืึทืฉืคึผืื ืคืื ืึท ืฆืืืื-ืืืขื ืืืกืืขืจ ืืื ืงืืืขื ื-ืกืขืจืืืขืจ ืึทืจืงืึทืืขืงืืฉืขืจ ืืื ืื ืืขืื-ืขื ืืคืขืจ ืืืกืืขืจ. ืืื ืก ืงืืง ืืื ืื ืืืกืืขืจ ืืื ืืืึทื ืืึธืืืคืืงืึทืืืึธื ืก.
ืืขืื-ืขื ืืคืขืจ ืึธืืขืจ RPC
RPC ืืื ืืขื ืืฆื ืืืขื ืืืจ ืืึทืจืคึฟื ืฆื ืืึทืงืืืขื ืึท ืขื ืืคืขืจ ืคืื ืื ืื ืืขืจ ืคึผืจืึธืฆืขืก. ืืขืจ ืคึผืจืึธืฆืขืก ืงืขื ืืืื ืคืืืกื ืืืง ืืืืฃ ืืขืจ ืืขืืืืงืขืจ ื ืึธืืข ืึธืืขืจ ืืืื ืืืืฃ ืึท ืึทื ืืขืจืฉ ืงืึธื ืืื ืขื ื. ืื ืืขืจ ืืื ืึท ืืืึทืืจืึทืืข ืคืื โโืื ืื ืืขืจืึทืงืฉืึทื ืฆืืืืฉื ืงืืืขื ื ืืื ืกืขืจืืืขืจ ืืืจื ืืขืกืืืืฉืื ื.
ืืื ื ืืขืกืืืืฉืื ื ืืื ืืึธืจ ืืืกืื ืืงืจืึทื ืึทืก, ืคึฟืึทืจ ืืขื ืงืืืขื ื, ืืขืจ ืืืขืงืกื ืืื ืฆืขืืืืื ืืื 2 ืคืืืืึทื:
-
ืฉืืงื ืืขืื
messaging:request(Exchange, ResponseMatchingTag, RequestDefinition, HandlerProcess).
ืืืึทื โ ืืื ืฆืืง ื ืึธืืขื ืคืื ืืขืจ ืืืขืงืกื ืคืื ื
ResponseMatchingTag โ ืืืืข ืคืืจืืข ืคึฟืึทืจ ืคึผืจืึทืกืขืกืื ื ืื ืขื ืืคืขืจ. ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืืื ืื ืคืึทื ืคืื ืฉืืงื ืขืืืขืืข ืืืืขื ืืงืึทื ืจืืงืืืขืก ืืืืึธื ืืื ื ืฆื ืคืึทืจืฉืืืขื ืข ื ืืฆืขืจืก.
RequestDefinition - ืืขืื ืืืฃ
ืืึทื ืืืขืจ ืคึผืจืึธืฆืขืก โ PID ืคืื ืื ืืึทื ืืืขืจ. ืืขืจ ืคึผืจืึธืฆืขืก ืืืขื ืืึทืงืืืขื ืึท ืขื ืืคืขืจ ืคืื ืื ืกืขืจืืืขืจ. -
ืคึผืจืึทืกืขืกืื ื ืื ืขื ืืคืขืจ
handle_info(#'$msg'{exchange = EXCHANGE, tag = ResponseMatchingTag,message = ResponsePayload}, State)
ResponsePayload - ืกืขืจืืืขืจ ืขื ืืคืขืจ.
ืคึฟืึทืจ ืื ืกืขืจืืืขืจ, ืืขืจ ืคึผืจืึธืฆืขืก ืืืื ืืืฉืืืื ืคืื 2 ืคืืืืึทื:
- ืื ืืืืึทืืืืื ื ืื ืืืขืงืกื ืคืื ื
- ืคึผืจืึทืกืขืกืื ื ืคืื ืืืงืืืขื ืจืืงืืืขืก
ืืื ืก ืืืืืกืืจืืจื ืืขื ืืืกืืขืจ ืืื ืงืึธื. ืืื ืก ืืึธืื ืืืจ ืืึทืจืคึฟื ืฆื ืื ืกืืจืืืขื ื ืึท ืคึผืฉืื ืืื ืกื ืืืึธืก ืืื ืึท ืืืื ืคึผืื ืืืขื ืฆืืื ืืืคึฟื.
ืกืขืจืืืืจืขืจ ืงืึธื
ืืึธืืืจ ืืขืคืื ืืจื ืื ืกืขืจืืืืก ืึทืคึผื ืืื api.hrl:
%% =====================================================
%% entities
%% =====================================================
-record(time, {
unixtime :: non_neg_integer(),
datetime :: binary()
}).
-record(time_error, {
code :: non_neg_integer(),
error :: term()
}).
%% =====================================================
%% methods
%% =====================================================
-record(time_req, {
opts :: term()
}).
-record(time_resp, {
result :: #time{} | #time_error{}
}).
ืืื ืก ืืขืคืื ืืจื ืื ืกืขืจืืืืก ืงืึธื ืืจืึธืืืขืจ ืืื time_controller.erl
%% ะ ะฟัะธะผะตัะต ะฟะพะบะฐะทะฐะฝ ัะพะปัะบะพ ะทะฝะฐัะธะผัะน ะบะพะด. ะััะฐะฒะธะฒ ะตะณะพ ะฒ ัะฐะฑะปะพะฝ gen_server ะผะพะถะฝะพ ะฟะพะปััะธัั ัะฐะฑะพัะธะน ัะตัะฒะธั.
%% ะธะฝะธัะธะฐะปะธะทะฐัะธั gen_server
init(Args) ->
%% ะฟะพะดะบะปััะตะฝะธะต ะบ ัะพัะบะต ะพะฑะผะตะฝะฐ
messaging:monitor_exchange(req_resp, ?EXCHANGE, default, self())
{ok, #{}}.
%% ะพะฑัะฐะฑะพัะบะฐ ัะพะฑััะธั ะฟะพัะตัะธ ัะฒัะทะธ ั ัะพัะบะพะน ะพะฑะผะตะฝะฐ. ะญัะพ ะถะต ัะพะฑััะธะต ะฟัะธั
ะพะดะธั, ะตัะปะธ ัะพัะบะฐ ะพะฑะผะตะฝะฐ ะตัะต ะฝะต ะทะฐะฟัััะธะปะฐัั.
handle_info(#exchange_die{exchange = ?EXCHANGE}, State) ->
erlang:send(self(), monitor_exchange),
{noreply, State};
%% ะพะฑัะฐะฑะพัะบะฐ API
handle_info(#time_req{opts = _Opts}, State) ->
messaging:response_once(Client, #time_resp{
result = #time{ unixtime = time_utils:unixtime(now()), datetime = time_utils:iso8601_fmt(now())}
});
{noreply, State};
%% ะทะฐะฒะตััะตะฝะธะต ัะฐะฑะพัั gen_server
terminate(_Reason, _State) ->
messaging:demonitor_exchange(req_resp, ?EXCHANGE, default, self()),
ok.
ืงืืืขื ื ืงืึธื
ืืื ืกืืจ ืฆื ืฉืืงื ืึท ืืงืฉื ืฆื ืื ืกืขืจืืืืก, ืืืจ ืงืขื ืขื ืจืืคื ืื ืืขืกืืืืฉืื ื ืืขืื API ืขืจืืขืฅ ืืื ืืขื ืงืืืขื ื:
case messaging:request(?EXCHANGE, tag, #time_req{opts = #{}}, self()) of
ok -> ok;
_ -> %% repeat or fail logic
end
ืืื ืึท ืคืื ืื ืืขืจืืขืืืืื ืกืืกืืขื, ืื ืงืึทื ืคืืืืขืจืืืฉืึทื ืคืื ืงืึทืืคึผืึธืื ืึทื ืฅ ืงืขื ืขื ืืืื ืืืืขืจ ืึทื ืืขืจืฉ ืืื ืืื ืืขืจ ืฆืืื ืคืื ืื ืืขืื, ืืขืกืืืืฉืื ื ืงืขื ื ืืฉื ื ืึธื ืึธื ืืืืื, ืึธืืขืจ ืื ืกืขืจืืืืก ืงืึธื ืืจืึธืืืขืจ ืืืขื ื ืืฉื ืืืื ืืจืืื ืฆื ืืื ืขื ืืขื ืืขืื. ืืขืจืืืขืจ, ืืืจ ืืึทืจืคึฟื ืฆื ืงืึธื ืืจืึธืืืจื ืื ืืขืกืืืืฉืื ื ืขื ืืคืขืจ ืืื ืฉืขืคึผื ืื ืืืจืืคืึทื ืคืึทื.
ื ืึธื ืืขืจืึธืื ืฉืืงื, ืืขืจ ืงืืืขื ื ืืืขื ืืึทืงืืืขื ืึท ืขื ืืคืขืจ ืึธืืขืจ ืืขืืช ืคืื ืื ืกืขืจืืืืก.
ืืื ืก ืฉืขืคึผื ืืืืืข ืงืึทืกืขืก ืืื handle_info:
handle_info(#'$msg'{exchange = ?EXCHANGE, tag = tag, message = #time_resp{result = #time{unixtime = Utime}}}, State) ->
?debugVal(Utime),
{noreply, State};
handle_info(#'$msg'{exchange = ?EXCHANGE, tag = tag, message = #time_resp{result = #time_error{code = ErrorCode}}}, State) ->
?debugVal({error, ErrorCode}),
{noreply, State};
ืืขืื-ืืฉืื ืงืขื ืขื ืืคืขืจ
ืขืก ืืื ืืขืกืืขืจ ืฆื ืืืกืืืืื ืฉืืงื ืจืืืืง ืึทืจืืืงืืขื. ืื ืจืืกืคึผืึทื ืกืืืื ืึทืก ืืื ืกืืึทืืื ืึธืคึผืขืจืึทืฆืืข ืคืื โโืื ืืื ืฆืข ืกืืกืืขื ืืขืคึผืขื ืืก ืืืืฃ ืืขื. ืืืื ืืขืจ ืขื ืืคืขืจ ืฆื ืึท ืึธื ืคึฟืจืขื ื ืขืื ืึท ืคึผืืึทืฅ ืคืื ืืึผืจืื, ืกืคึผืืืืื ื ืขืก ืืื ืคึผืึทืจืฅ ืืื ืืึทื ืืึทืืึธืจื.
ืืึธืื ืืืจ ืืขืื ืืืจ ืึท ืคึผืึธืจ ืคืื ืืืืฉืคืืื ืคืื ืึทืืึท ืงืึทืกืขืก:
- ืื ืงืึทืืคึผืึธืื ืึทื ืฅ ืืืขืงืกื ืืืื ืขืจื ืืึทืื, ืึทืืึท ืืื ืืขืงืขืก. ืืจืืืงืื ื ืื ืขื ืืคืขืจ ืืื ืงืืืื ืคึผืึทืจืฅ ืืขืืคึผืก ืืืจ ืึทืจืืขื ืืคืืฉืึทื ืืื ืืื ืืขืงืขืก ืคืื ืงืืื ืืจืืืก ืืื ืืืกืืืืื ืืืงืึธืจื ืึธืืืืขืจืคืืึธืื.
- ืืืกืืื ืืก. ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืืืจ ืืึทืจืคึฟื ืฆื ืืืืกืงืืืึทืื ืึทืืข ืจืขืงืึธืจืืก ืคืื ืึท ืจืืืืง ืืืฉ ืืื ืื ืืึทืืึทืืืืก ืืื ืึทืจืืืขืจืคืืจื ืืื ืฆื ืื ืื ืืขืจ ืงืึธืืคึผืึธื ืขื ื.
ืืื ืจืืคื ืื ืจืขืกืคึผืึธื ืกืขืก ืืึธืงืึธืืึธืืืืืข. ืืื ืงืืื ืคืึทื, 1024 ืึทืจืืืงืืขื ืคืื 1 ืื ืืขื ืขื ืืขืกืขืจ ืืื ืึท ืืืื ืึธื ืืึธื ืคืื 1 ืืืืืืืื.
ืืื ืื ืขืจืืึทื ื ืงื ืืื, ืืืจ ืืึทืงืืืขื ืึทื ื ืึธื ื ืืฅ - ืจืืืืกืื ื ืื ืืึทืกืข ืืืืฃ ืื ืืืขืงืกื ืคืื ื ืืื ืื ื ืขืฅ, ืืืืึทื ืื ืจืขืกืคึผืึธื ืกืขืก ืืขื ืขื ืืืืื ืืขืฉืืงื ืฆื ืื ืืึทืงืืืขืจ, ืืืืคึผืึทืกืื ื ืื ืืืขืงืกื ืคืื ื.
ืขื ืืคืขืจ ืืื ืืงืฉื
ืืึธืก ืืื ืึท ืืึทื ืฅ ืืขืืื ืืึธืืืคืืงืึทืืืึธื ืคืื ืื RPC ืืืกืืขืจ ืคึฟืึทืจ ืื ืื ืืืึทืืึธื ืกืืกืืขืืขื.
ืึทืจืืืกืืขืื-ืึทืืึธื ืืจื (ืืึทืื ืคืึทืจืฉืคึผืจืืืืื ื ืืืื)
ืืขืฉืขืขื ืืฉ-ืืขืืจืืื ืกืืกืืขืืขื ืฆืืฉืืขืื ืืื ืฆื ืงืึธื ืกืืืขืจืก ืืื ืืึทืื ืืื ืื ืืึทืื ืืขื ืขื ืืจืืื. ืืืื, ืกืืกืืขืืขื ืืขื ืขื ืืขืจ ืคึผืจืึธื ืข ืฆื ืึท ืฉืืืคึผ ืืึธืืขื ืืื ืฆื ืึท ืฆืืขื ืึธืืขืจ ืึทื ืงืขืืข ืืึธืืขื. ืืขืจ ืฉืืจืื ืึทืืึทืื ืืืจ ืฆื ืืืกืืืืื ืืืืืกืืื ื ืจืขืกืืจืกื ืืืจื ืงืขืกืืืืขืจ ืืขืื ืืื ืืืืจืื ืคึฟืึทืจ ืืึทืื.
ืื ืคืืืืจ ืืืืืื ืืขื ืคึผืจืึธืฆืขืก ืคืื ืืืกืืจืืืืืืื ื ืึท ืึธื ืืึธื ืฆื ืงืึธื ืกืืืขืจืก ืึทืืึธื ืืจื ืฆื ืึท ืกืคึผืขืฆืืคืืฉ ืืขืืข.
ืงืืึทืกืืฉ ืืืืฉืคืืื ืคืื ื ืืฆื ืืขื ืืืกืืขืจ ืืขื ืขื ืื ืคืึทืจืฉืคึผืจืืืืื ื ืคืื ืฉืืึทื: ืื ืฉืคึผืื ืืืขืื ืืื ืงืึธืืคึผืืืืขืจ ืฉืคึผืืืขืจืืึท, ืืึทืจืง ืืึทืื ืืืืฃ ืืงืกืืฉืืื ืืืฉืื, ื ืืฆืืง ืืื ืคึฟืึธืจืืึทืฆืืข ืืื ืืึทืื ืคืืื.
ืืื ืก ืงืืง ืืื ืื ืึทืืึธื ืขื ื ืงืึธื:
init(_Args) ->
%% ะฟะพะดะฟะธััะฒะฐะตะผัั ะฝะฐ ะพะฑะผะตะฝะฝะธะบ, ะบะปัั = key
messaging:subscribe(?SUBSCRIPTION, key, tag, self()),
{ok, #{}}.
handle_info(#exchange_die{exchange = ?SUBSCRIPTION}, State) ->
%% ะตัะปะธ ัะพัะบะฐ ะพะฑะผะตะฝะฐ ะฝะตะดะพัััะฟะฝะฐ, ัะพ ะฟััะฐะตะผัั ะฟะตัะตะฟะพะดะบะปััะธัััั
messaging:subscribe(?SUBSCRIPTION, key, tag, self()),
{noreply, State};
%% ะพะฑัะฐะฑะฐััะฒะฐะตะผ ะฟัะธัะตะดัะธะต ัะพะพะฑัะตะฝะธั
handle_info(#'$msg'{exchange = ?SUBSCRIPTION, message = Msg}, State) ->
?debugVal(Msg),
{noreply, State};
%% ะฟัะธ ะพััะฐะฝะพะฒะบะต ะฟะพััะตะฑะธัะตะปั - ะพัะบะปััะฐะตะผัั ะพั ัะพัะบะธ ะพะฑะผะตะฝะฐ
terminate(_Reason, _State) ->
messaging:unsubscribe(?SUBSCRIPTION, key, tag, self()),
ok.
ืืขืจ ืืงืืจ ืงืขื ืขื ืจืืคื ืื ืคึฟืื ืงืฆืืข ืฆื ืึทืจืืืกืืขืื ืึท ืึธื ืืึธื ืืื ืงืืื ืืึทืงืืืขื ืึธืจื:
messaging:publish_message(Exchange, Key, Message).
ืืืึทื - ื ืึธืืขื ืคืื ืืขืจ ืืืขืงืกื ืคืื ื,
ืฉืืืกื - ืจืืืื ื ืฉืืืกื
ืึธื ืืึธื - ืคึผืืืืึธืื
ืื ืืืขืจืืื ืึทืจืืืกืืขืื-ืึทืืึธื ืืจื
ืืืจื ืืงืกืคึผืึทื ืืื ื ืฉืขื ืง-ืกืึทื, ืืืจ ืงืขื ืขื ืืึทืงืืืขื ืึท ืืืกืืขืจ ืืึทืงืืืขื ืคึฟืึทืจ ืืึธืืื ื. ืืขืจ ืืึทื ื ืคืื ืงืืืืื ืืื ืงืึธื ืกืืืขืจืก ืงืขื ืขื ืืืื ืืึธืจ ืึทื ืืขืจืฉ. ืื ืคืืืืจ ืืืืืื ืึท ืคืึทื ืืื ืืืื ืงืึทื ืกืืืขืจ ืืื ืงืืืคื ืงืืืืื.
ืึทืจืืขื ืคืึทืจืฉืคึผืจืืืืื ื ืืืกืืขืจ
ืึผืืขื ืืขืืขืจ ืคึผืจืืืขืงื ืื ืืืึทืืืื ืืืคืขืจื ืคึผืจืึทืกืขืกืื ื ืืึทืกืงืก, ืึทืืึท ืืื ืืืฉืขื ืขืจืืืืื ื ืจืืคึผืึธืจืฅ, ืืขืืืืืขืจืื ื ื ืึธืืืึทืคืึทืงืืืฉืึทื ื ืืื ืจืืืจืืืืื ื ืืึทืื ืคืื ืืจืื-ืคึผืึทืจืืื ืกืืกืืขืืขื. ืื ืืจืืคึผืื ืคืื ืื ืกืืกืืขื ืคึผืขืจืคืึธืจืืื ื ืื ืืึทืกืงืก ืงืขื ืขื ืืืื ืืืืื ืกืงืืืื ืืืจื ืึทืืื ื ืืึทื ืืืขืจืก. ืึทืืข ืืืึธืก ืืืืืื ืคึฟืึทืจ ืืื ืื ืืื ืฆื ืคืึธืจืขื ืึท ืงื ืืื ืคืื ืคึผืจืึทืกืขืกืขืจื ืืื ืืืืึทื ืื ืคืึทืจืฉืคึผืจืืืื ืืึทืกืงืก ืฆืืืืฉื ืืื.
ืืื ืก ืงืืง ืืื ืื ืกืืืืึทืืืึธื ืก ืืืึธืก ืฉืืืืขื ืืื ืืขื ืืืึทืฉืคึผืื ืคืื 3 ืืึทื ืืืขืจืก. ืืคืืื ืืื ืืขืจ ืืื ืข ืคืื โโืึทืจืืขื ืคืึทืจืฉืคึผืจืืืืื ื, ืื ืงืฉืื ืคืื ืืืืฉืขืจ ืคืื ืคืึทืจืฉืคึผืจืืืืื ื ืืื ืึธืืืืขืจืคืืึธื ืคืื ืืึทื ืืืขืจืก ืขืจืืืืึทื. ืจืึธืื ื-ืจืึธืืื ืคืึทืจืฉืคึผืจืืืืื ื ืืืขื ืืืื ืคืึทืจืึทื ืืืืึธืจืืืขื ืคึฟืึทืจ ืืืืฉืขืจ, ืืื ืฆื ืืืกืืืืื ืึท ืกืืืืึทืฆืืข ืคืื โโืึธืืืืขืจืคืืึธื ืคืื ืืึทื ืืืขืจืก, ืืืจ ืืืขืื ืคืึธืจืฉืืขืื ืึท ืจืืกืืจืืงืฉืึทื prefetch_limit. ืืื ืืจืึทื ืืฉืึทื ื ืื ืึธืื prefetch_limit ืืืขื ืคืึทืจืืืึทืื ืืืื ืืึทื ืืืขืจ ืคืื ืจืืกืืืืื ื ืึทืืข ืืึทืกืงืก.
ืืขืกืืืืฉืื ื ืืึทื ืืืืฉืื ืงืืื ืืื ืคึผืจืึทืกืขืกืื ื ืืืืืขืจืงืืึทื. ืคึผืจืึทืกืขืกืขืจื ืืึทืงืืืขื ืืึทืกืงืก ืืื ืืื ืึธื ืงืืืขื. ืื ืึทืจืืขื ืงืขื ืขื ืคืึทืจืขื ืืืงื ืืฆืืื ืึธืืขืจ ืืืจืืคืึทื:
messaging:ack(Tack)
- ืืขืจืืคื ืืืื ืืขืจ ืึธื ืืึธื ืืื ืืฆืืื ืคึผืจืึทืกืขืกืmessaging:nack(Tack)
- ืืขืจืืคื ืืื ืึทืืข ื ืืืืคืึทื ืกืืืืึทืืืึธื ืก. ืึทืืึธื ืื ืึทืจืืขื ืืื ืืืืืขืงืขืจื, ืืขืกืืืืฉืื ื ืืืขื ืคืึธืจื ืขืก ืฆื ืื ืื ืืขืจ ืืึทื ืืืขืจ.
ืจืขืื ืึท ืงืึธืืคึผืืขืงืก ืืืจืืคืึทื ืืื ืคืืจืืขืงืืืขื ืืฉืขืช ืคึผืจืึทืกืขืกืื ื ืืจืื ืืึทืกืงืก: ืคึผืจืึทืกืขืกืขืจ 1, ื ืึธื ืืืงืืืขื ืื ืึทืจืืขื, ืงืจืึทืฉื ืึธื ืฆืืื ืฆื ืืึทืจืืื ืขืคึผืขืก ืฆื ืื ืืืขืงืกื ืคืื ื. ืืื ืืขื ืคืึทื, ืืขืจ ืืืขืงืกื ืคืื ื ืืืขื ืึทืจืืืขืจืคืืจื ืื ืึทืจืืขื ืฆื ืื ืื ืืขืจ ืืึทื ืืืขืจ ื ืึธื ืื ืึทืง ืืืืืึทืื ืืื ืืืืกืืขืืื ืืขื. ืคึฟืึทืจ ืขืืืขืืข ืกืืื, ืืึทื ืืืขืจ 3 ืคืืจืืืื ืื ืึทืจืืขื ืืื ืืขืฉืืงื ื ืึทืง; ืืื ืึท ืจืขืืืืืึทื, ืื ืึทืจืืขื ืืื ืืืื ืืจืึทื ืกืคืขืจื ืฆื ืื ืื ืืขืจ ืืึทื ืืืขืจ ืืืึธืก ืืฆืืื ืืขืขื ืืืงื ืขืก.
ืคึผืจืขืืืืื ืึทืจื ืงืืฆืขืจ
ืืืจ ืืึธืื ืืืืขืงื ืื ืืงืขืจืืืง ืื ืื ืืืึทืงืก ืคืื ืคืื ืื ืืขืจืืขืืืืื ืกืืกืืขืืขื ืืื ืคืืจืืื ื ืึท ืืงืขืจืืืง ืคืืจืฉืืื ื ืคืื ืืืืขืจ ื ืืฆื ืืื ืขืจืืึทื ื / ืขืืืงืกืืจ.
ืืืจื ืงืึทืืืืื ืื ื ืืงืขืจืืืง ืคึผืึทืืขืจื ื, ืืืจ ืงืขื ืขื ืืืืขื ืงืึธืืคึผืืขืงืก ืคึผืขืจืึทืืืื ืฆื ืกืึธืืืืข ืืืขืจืืืฉืื ื ืคึผืจืึธืืืขืืก.
ืืื ืื ืืขืฆื ืืืื ืคืื ืื ืกืขืจืืข, ืืืจ ืืืขืื ืงืืงื ืืื ืึทืืืขืืืื ืืฉืื ืคืื ืึธืจืืึทื ืืืืื ื ืืึทืืื ืื ืืก, ืจืืืื ื ืืื ืืึทืืึทื ืกืื ื, ืืื ืืืื ืจืขืื ืืืขืื ืื ืคึผืจืึทืงืืืฉ ืืืึทื ืคืื ืกืงืึทืืึทืืืืืื ืืื ืฉืืื ืืึธืืขืจืึทื ืฅ ืคืื ืกืืกืืขืืขื.
ืกืืฃ ืคืื ืื ืจืืข ืืืื.
Photo
ืืืืืกืืจืืฆืืขืก ืฆืืืขืืจืืื ืืื websequencediagrams.com
ืืงืืจ: www.habr.com