I nga ra o mua
- Tono-whakautu
- Whakautu Tono-Chunked
- Whakautu me te Tono
- Whakaputa-ohauru
- Hurihuri Whakaputa-ohauru
- Te tohatoha mahi
SOA, MSA me te Karere
Ko te SOA, ko MSA nga hoahoanga punaha e tautuhi ana i nga ture mo nga punaha hanga whare, i te wa e tuku ana nga karere i nga tikanga tuatahi mo te whakatinanatanga.
Kaore au e pai ki te whakatairanga i tenei, i tera ranei te hoahoanga punaha. Ko ahau mo te whakamahi i nga tikanga tino whai hua me te whai hua mo tetahi kaupapa motuhake me te pakihi. Ahakoa he aha te ahua ka whiriwhiria e tatou, he pai ake te hanga poraka punaha me te titiro ki te Unix-ara: nga waahanga me te iti o te honohono, te kawenga mo nga hinonga takitahi. Ko nga tikanga API e mahi ana i nga mahi ngawari me nga hinonga.
Ko te Karere, ko te ingoa e kii ana, he kaihokohoko karere. Ko tana kaupapa matua ko te whiwhi me te tuku karere. Kei a ia te kawenga mo nga hononga mo te tuku korero, te hanganga o nga huarahi arorau mo te tuku korero i roto i te punaha, te ararere me te whakataurite, tae atu ki te whakahaere hapa i te taumata o te punaha.
Ko te karere e whakawhanake ana matou ehara i te ngana ki te whakataetae me te whakakapi ranei i te rabbitmq. Ko ona ahuatanga matua:
- Tohanga.
Ka taea te hanga i nga tohu whakawhiti ki runga i nga kohinga kahui katoa, kia tata ki te waehere e whakamahi ana. - He ngawari.
Arotahi ki te whakaiti i te waehere boilerplate me te ngawari o te whakamahi. - He pai ake te mahi.
Kaore matou e ngana ana ki te whakahoki ano i nga mahi o te rabbitmq, engari me tohu noa te paparanga hoahoanga me te kawe waka, e uru ana matou ki te OTP i te mea ka taea, me te whakaiti i nga utu. - Te ngawari.
Ka taea e ia ratonga te whakakotahi i nga tauira whakawhiti maha. - Te manahau ma te hoahoa.
- Tauineine.
Ka tipu te karere me te tono. Ka piki ake te kawenga, ka taea e koe te neke i nga tohu whakawhiti ki nga miihini takitahi.
Ranui. Mo te whakahaere waehere, he pai nga kaupapa-meta mo nga punaha Erlang / Elixir matatini. Ko nga waehere kaupapa katoa kei roto i tetahi putunga - he kaupapa marara. I te wa ano, ka tino wehea nga ratonga moroiti me te mahi i nga mahi ngawari hei kawenga mo tetahi hinonga motuhake. Ma tenei huarahi, he ngawari ki te pupuri i te API o te punaha katoa, he ngawari ki te whakarereke, he pai ki te tuhi i nga waahanga me nga whakamatautau whakauru.
Ko nga waahanga o te punaha e mahi tika ana ma te kaihokohoko ranei. Mai i te tirohanga karere, he maha nga waahanga o ia ratonga:
- Arawhitinga ratonga.
I tenei wa, ka whirihorahia, ka whakarewahia te tukanga me nga whakawhirinakitanga e whakahaere ana i te ratonga. - Te hanga i tetahi waahi whakawhiti.
Ka taea e te ratonga te whakamahi i tetahi tohu whakawhiti pateko kua tohua i roto i te whirihoranga node, ka hanga hihiri ranei nga tohu whakawhiti. - Rehita ratonga.
Kia taea ai e te ratonga te tuku tono, me rehita ki te waahi whakawhiti. - Mahi noa.
Ko te ratonga ka whakaputa i nga mahi whai hua. - Whakaweto.
E rua nga momo katinga ka taea: noa me te ohorere. I te wa e mahi noa ana, ka momotuhia te ratonga mai i te waahi whakawhiti ka mutu. I nga ahuatanga ohorere, ka mahia e te karere tetahi o nga tuhinga ngaro.
He tino uaua te ahua, engari ehara te waehere i te tino whakamataku. Ko nga tauira waehere me nga korero ka tukuna i roto i te tātaritanga o nga tauira i muri tata nei.
whakawhitinga
Ko te tohu whakawhiti he tukanga karere e whakatinana ana i te arorau o te taunekeneke me nga waahanga kei roto i te tauira karere. I roto i nga tauira katoa e whakaatuhia ana i raro nei, ka pahekoheko nga waahanga ma nga waahi whakawhiti, ko te huinga o enei ka hanga karere.
Tauira whakawhiti karere (MEP)
I te ao katoa, ka taea te wehewehe i nga tauira whakawhiti ki nga huarahi e rua me te huarahi kotahi. Ko te korero o mua he whakautu ki tetahi karere taumai, ko te mea whakamutunga kaore. He tauira matarohia o te tauira-rua i roto i te hoahoanga-kiritaki-tumau ko te tauira Tono-whakautu. Me titiro ki te tauira me ona whakarereketanga.
Tono-whakautu, RPC ranei
Ka whakamahia te RPC ina hiahia tatou ki te whiwhi urupare mai i tetahi atu tukanga. Ka haere pea tenei tukanga i runga i te node kotahi, kei runga ranei i tetahi whenua rereke. Kei raro nei te hoahoa o te taunekeneke i waenga i te kiritaki me te tūmau mā te karere.
I te mea he koretake te tuku karere, mo te kaihoko ka wehea te whakawhiti ki nga waahanga e 2:
-
Tukuna tono
messaging:request(Exchange, ResponseMatchingTag, RequestDefinition, HandlerProcess).
Exchange ‒ ingoa ahurei o te waahi whakawhiti
ResponseMatchingTag ‒ tapanga rohe mo te tukatuka i te whakautu. Hei tauira, i roto i te take o te tuku i etahi tono rite mo nga kaiwhakamahi rereke.
TonoWhakamaramatanga - tono tinana
KaihautuTuhinga ‒ PID o te kaihautu. Ka whiwhi whakautu tenei tukanga mai i te tūmau. -
Te tukatuka i te whakautu
handle_info(#'$msg'{exchange = EXCHANGE, tag = ResponseMatchingTag,message = ResponsePayload}, State)
Uta Whakautu - whakautu tūmau.
Mo te tūmau, e rua nga waahanga o te tukanga:
- Te timata i te waahi whakawhiti
- Te tukatuka i nga tono kua tae mai
Me whakaatu tenei tauira me te waehere. Me kii tatou me whakatinana he ratonga ngawari e whakarato ana i te tikanga wa tika kotahi.
Waehere tūmau
Me tautuhi te API ratonga ki 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{}
}).
Me tautuhi te kaiwhakahaere ratonga i te 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.
Waehere kiritaki
Hei tuku tono ki te ratonga, ka taea e koe te waea atu ki te API tono karere ki nga waahi katoa o te kiritaki:
case messaging:request(?EXCHANGE, tag, #time_req{opts = #{}}, self()) of
ok -> ok;
_ -> %% repeat or fail logic
end
I roto i te punaha tohatoha, he rereke te rereke o te whirihoranga o nga waahanga, a, i te wa o te tono, kaore ano kia timata te karere, kaore ranei te kaiwhakahaere ratonga e rite ki te mahi i te tono. Na reira, me tirotirohia te whakautu karere me te hapai i te keehi rahunga.
I muri i te tuku angitu, ka whiwhi te kiritaki i te whakautu, i te hapa ranei mai i te ratonga.
Me whakahaere nga keehi e rua i roto i te 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};
Whakautu Tono-Chunked
He pai ki te karo i te tuku karere nui. Ko te urupare me te mahi pumau o te punaha katoa ka whakawhirinaki ki tenei. Mena ka nui te mahara o te whakautu ki tetahi patai, he mea whakahau kia wehewehea ki etahi waahanga.
Ka hoatu e ahau etahi tauira o enei keehi:
- Ko nga waahanga e whakawhiti ana i nga raraunga rua, penei i nga konae. Ko te wawahi i te whakautu ki nga waahanga iti ka awhina koe ki te mahi pai me nga konae ahakoa te rahi me te karo i te puhake mahara.
- Nga rarangi ingoa. Hei tauira, me kowhiria e tatou nga rekoata katoa mai i tetahi ripanga nui i roto i te paataka raraunga ka whakawhiti ki tetahi atu waahanga.
Ka kiia e au enei whakautu he kaikoohiko. Ahakoa he aha, he pai ake nga karere 1024 o te 1 MB i te karere kotahi o te 1 GB.
I roto i te roopu Erlang, ka whiwhi tatou i te painga atu - te whakaiti i te kawenga i runga i te waahi whakawhiti me te whatunga, na te mea ka tukuna tonu nga whakautu ki te kaiwhiwhi, ma te whakawhiti i te waahi whakawhiti.
Whakautu me te Tono
He whakarereke onge tenei o te tauira RPC mo te hanga punaha korero.
Whakaputa-ohauru (rakau tohatoha raraunga)
Ko nga punaha whakahaere-a-takahanga ka tukuna ki nga kaihoko i te wa kua rite nga raraunga. No reira, he kaha ake nga punaha ki te tauira pana atu i te tauira kume, pooti ranei. Ma tenei ahuatanga ka taea e koe te karo i te moumou rauemi ma te tono me te tatari mo nga raraunga.
Ko te ahua e whakaatu ana i te tukanga o te tohatoha karere ki nga kaihoko kua ohauru ki tetahi kaupapa motuhake.
Ko nga tauira tawhito o te whakamahi i tenei tauira ko te tohatoha o te kawanatanga: te ao keemu i roto i nga keemu rorohiko, nga raraunga maakete mo nga whakawhitinga, nga korero whai hua i roto i nga whangai raraunga.
Kia titiro tatou ki te waehere kaiohauru:
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.
Ka taea e te puna te karanga i te mahi ki te whakaputa karere ki tetahi waahi watea:
messaging:publish_message(Exchange, Key, Message).
Exchange - ingoa o te waahi whakawhiti,
Key - kī ararere
karere - utaina
Hurihuri Whakaputa-ohauru
Ma te whakawhänui i te pub-sub, ka taea e koe te tiki tauira pai mo te takiuru. Ko te huinga o nga puna me nga kaihoko ka tino rereke. Ko te ahua e whakaatu ana i tetahi keehi me tetahi kaihoko me nga puna maha.
Tauira tohatoha mahi
Tata ki ia kaupapa he mahi tukatuka whakaroa, penei i te whakaputa purongo, te tuku panui, me te tango raraunga mai i nga punaha tuatoru. Ko te whakaputanga o te punaha e mahi ana i enei mahi ka ngawari ki te whakarahi ma te taapiri i nga kaikawe. Ko nga mea e toe ana ma matou ko te hanga i te roopu o nga kaitukatuka me te tohatoha i nga mahi ki waenga i a raatau.
Me titiro ki nga ahuatanga ka puta ma te whakamahi i te tauira o nga kaikawe e 3. Ahakoa i te wahanga o te tohatoha mahi, ka ara ake te patai mo te tika o te tohatoha me te puhake o nga kaikawe. Ko te tohatoha-a-roobin te kawenga mo te tika, me te karo i te ahua o te puhake o nga kaikawe, ka tukuna e matou he here. prefetch_limit. I roto i nga ahuatanga poto prefetch_limit ka aukati tetahi kaihautu ki te whiwhi i nga mahi katoa.
Ko te Karere e whakahaere ana i nga rarangi me te mahi matua. Ka whiwhi mahi nga kaitukatuka ina tae mai. Ka taea e te mahi te whakaoti angitu, ka hinga ranei:
messaging:ack(Tack)
- ka karangahia mena kua pai te tukatuka i te kareremessaging:nack(Tack)
- ka karangahia i nga waahi ohorere katoa. Kia whakahokia mai te mahi, ka tukuna atu te karere ki tetahi atu kaihautu.
Mehemea i puta he rahunga uaua i te wa e tukatuka ana i nga mahi e toru: kaitukatuka 1, i muri i te whiwhinga o te mahi, i tuki me te kore e whai wa ki te tuku korero ki te waahi whakawhiti. I tenei keehi, ka whakawhitia e te waahi whakawhiti te mahi ki tetahi atu kaihautu i muri i te paunga o te wa waahi. Na etahi take, ka whakarerea e te Kaihautu 3 te mahi, ka tukuna he nack, na reira, i tukuna ano te mahi ki tetahi atu kaihautu i tutuki pai.
Whakarapopototanga Tuatahi
Kua hipokina e matou nga poraka hanga taketake o nga punaha tohatoha me te maarama ki te whakamahi i a Erlang/Elixir.
Ma te whakakotahi i nga tauira taketake, ka taea e koe te hanga paradigms uaua ki te whakaoti rapanga ka puta ake.
I te waahanga whakamutunga o te raupapa, ka titiro tatou ki nga take whanui mo te whakarite i nga ratonga, te ararere me te whakataurite, me te korero ano mo te taha whaihua o te tauineine me te aukati i nga hapa o nga punaha.
Te mutunga o te wahanga tuarua.
Photography
Ko nga whakaahua i whakaritea ma te whakamahi i te websequencediagrams.com
Source: will.com