Tha coimhearsnachd leasaiche Raiffeisenbank .NET aâ leantainn air adhart aâ dèanamh lèirmheas goirid air susbaint ViennaNET. Mu ciamar agus carson a thĂ inig sinn gu seo, .
San artaigil seo, thèid sinn tro leabharlannan nach deach a mheas fhathast airson a bhith ag obair le gnothaichean sgaoilte, ciudhaichean agus stòran-dà ta, a lorgar nar stòr-dà ta GitHub (), agus .
ViennaNET.Sagas
Nuair a thionndaidheas pròiseact gu ailtireachd DDD agus microservice, an uairsin nuair a thèid loidsig gnĂŹomhachais a sgaoileadh thairis air diofar sheirbheisean, bidh duilgheadas ag èirigh co-cheangailte ris an fheum air uidheamachd malairt sgaoilte a chuir an gnĂŹomh, leis gu bheil mòran shuidheachaidhean gu tric aâ toirt buaidh air grunn raointean aig an aon Ă m. Gheibh thu eòlas nas mionaidiche air innealan mar sin, mar eisimpleir, .
Anns na pròiseactan againn, tha sinn air inneal sĂŹmplidh ach feumail a chuir an gnĂŹomh: saga, no an Ă ite saga stèidhichte air orchestration. Tha a bhrĂŹgh mar a leanas: tha suidheachadh gnĂŹomhachais sònraichte ann far am feumar gnĂŹomhachd a dhèanamh ann an sreath ann an diofar sheirbheisean, agus ma dhâ èiricheas duilgheadas sam bith aig ĂŹre sam bith, feumar fios a chuir chun a h-uile ceum roimhe seo, far a bheil e riatanach. air a thoirt seachad. Mar sin, aig deireadh an t-saga, ge bith dè an soirbheachadh, gheibh sinn dĂ ta cunbhalach anns gach raon.
Tha ar buileachadh fhathast air a dhèanamh na chruth bunaiteach agus chan eil e ceangailte ri cleachdadh dhòighean sam bith airson eadar-obrachadh le seirbheisean eile. Chan eil e duilich a chleachdadh: dÏreach dèan sliochd den chlas eas-chruthach bunaiteach SagaBase<T>, far a bheil T an clas co-theacsa agad anns an urrainn dhut an dà ta tÚsail a tha riatanach airson an saga obrachadh, a bharrachd air cuid de thoraidhean eadar-mheadhanach. Thèid an t-eisimpleir co-theacsa troimhe gu gach ceum aig à m cur gu bà s. Tha Saga fhèin na chlas gun stà it, agus mar sin faodar an eisimpleir a chuir ann an DI mar Singleton gus na h-eisimeileachd riatanach fhaighinn.
Sanas eisimpleir:
public class ExampleSaga : SagaBase<ExampleContext>
{
public ExampleSaga()
{
Step("Step 1")
.WithAction(c => ...)
.WithCompensation(c => ...);
AsyncStep("Step 2")
.WithAction(async c => ...);
}
}
Call eisimpleir:
var saga = new ExampleSaga();
var context = new ExampleContext();
await saga.Execute(context);
Faodar lĂ n eisimpleirean de bhuileachadh eadar-dhealaichte fhaicinn agus ann an co-thional le .
ViennaNET.Orm.*
Seata de leabharlannan airson a bhith ag obair le diofar stòran-dĂ ta tro Nhibernate. Bidh sinn aâ cleachdadh an dòigh-obrach DB-First aâ cleachdadh Liquibase, agus mar sin chan eil ann ach comas-gnĂŹomh airson obrachadh le dĂ ta ann an stòr-dĂ ta deiseil.
ViennaNET.Orm.Seedwork и ViennaNET.Orm - prÏomh cho-chruinneachaidhean anns a bheil eadar-aghaidh bunaiteach agus na gnÏomhan aca, fa leth. Bheir sinn sÚil nas mionaidiche air an t-susbaint aca.
eadar-aghaidh IEntityFactoryService agus a bhuileachadh EntityFactoryService Is e seo am prÏomh à ite tòiseachaidh airson a bhith ag obair leis an stòr-dà ta, leis gu bheil an Aonad Obrach, stòran airson obrachadh le buidhnean sònraichte, a bharrachd air luchd-tiomnaidh òrdughan agus ceistean SQL dÏreach air an cruthachadh an seo. Aig amannan tha e goireasach comasan clas a chuingealachadh airson a bhith ag obair le stòr-dà ta, mar eisimpleir, gus comas dÏreach dà ta a leughadh. Airson leithid de chÚisean IEntityFactoryService tha sinnsear - eadar-aghaidh IEntityRepositoryFactory, a tha a-mhà in a 'foillseachadh dòigh airson cruthachadh stòran.
Gus faighinn chun stòr-dĂ ta gu dĂŹreach, thathas aâ cleachdadh inneal an t-solaraiche. Tha a bhuileachadh fhèin aig gach DBMS a bhios sinn aâ cleachdadh nar sgiobaidhean: ViennaNET.Orm.MSSQL, ViennaNET.Orm.Oracle, ViennaNET.Orm.SQLite, ViennaNET.Orm.PostgreSql.
Aig an aon Ă m, faodar grunn sholaraichean a chlĂ radh ann an aon iarrtas aig an aon Ă m, a leigeas, mar eisimpleir, taobh a-staigh frèam aon seirbheis, gun chosgais sam bith airson am bun-structar atharrachadh, imrich ceum air cheum a dhèanamh bho aon DBMS gu fear eile. Tha an dòigh airson an ceangal riatanach a thaghadh agus, mar sin, an solaraiche airson clas eintiteas sònraichte (far a bheil mapadh gu clĂ ran stòr-dĂ ta air a sgrĂŹobhadh) air a chuir an gnĂŹomh le bhith aâ clĂ radh an eintiteas anns aâ chlas BoundedContext (anns a bheil dòigh airson buidhnean fearainn a chlĂ radh) no an neach a thig Ă s a dhèidh. ApplicationContext (tha dòighean ann airson aonadan tagraidh a chlĂ radh, iarrtasan dĂŹreach agus òrdughan), far a bheilear aâ gabhail ris an aithnichear ceangail bhon rèiteachadh mar argamaid:
"db": [
{
"nick": "mssql_connection",
"dbServerType": "MSSQL",
"ConnectionString": "...",
"useCallContext": true
},
{
"nick": "oracle_connection",
"dbServerType": "Oracle",
"ConnectionString": "..."
}
],
Eisimpleir Co-theacsa Iarrtais:
internal sealed class DbContext : ApplicationContext
{
public DbContext()
{
AddEntity<SomeEntity>("mssql_connection");
AddEntity<MigratedSomeEntity>("oracle_connection");
AddEntity<AnotherEntity>("oracle_connection");
}
}
Mura h-eil an ID ceangail air a shònrachadh, thèid an ceangal leis an ainm âdefaultâ a chleachdadh.
Tha mapadh dĂŹreach de bhuidhnean gu clĂ ran stòr-dĂ ta air a bhuileachadh aâ cleachdadh innealan Ă bhaisteach NHibernate. Faodaidh tu an tuairisgeul a chleachdadh an dĂ chuid tro fhaidhlichean xml agus tro chlasaichean. Airson sgrĂŹobhadh goireasach de stòran-stub ann an deuchainnean Aonaid, tha leabharlann ann ViennaNET.TestUtils.Orm.
Gheibhear eisimpleirean slĂ n de bhith aâ cleachdadh ViennaNET.Orm.* .
ViennaNET.Messaging.*
Seata de leabharlannan airson a bhith ag obair le ciudha.
Gus obrachadh le ciudhaichean, chaidh an aon dòigh-obrach a thaghadh agus a chaidh a dhèanamh le diofar DBMSn, is e sin, an dòigh aonaichte as à irde a thaobh a bhith ag obair leis an leabharlann, ge bith dè am manaidsear ciudha a chaidh a chleachdadh. Leabharlann ViennaNET.Messaging gu cinnteach an urra ris an aonachadh seo, agus ViennaNET.Messaging.MQSeriesQueue, ViennaNET.Messaging.RabbitMQQueue и ViennaNET.Messaging.KafkaQueue cuir an gnÏomh inneal-atharrachaidh airson IBM MQ, RabbitMQ agus Kafka, fa leth.
Nuair a bhios tu ag obair le ciudha, tha dà phròiseas ann: faighinn teachdaireachd agus a chuir.
Beachdaich air faighinn. Tha 2 roghainn an seo: airson èisteachd leantainneach agus airson aon teachdaireachd fhaighinn. Gus èisteachd ris aâ chiudha gu cunbhalach, feumaidh tu an toiseach cunntas a thoirt air aâ chlas pròiseasar a fhuair thu IMessageProcessor, a bhios an urra ri bhith aâ lĂ imhseachadh an teachdaireachd a thig a-steach. An ath rud, feumaidh e a bhith âceangailteâ ri ciudha sònraichte; thèid seo a dhèanamh tro chlĂ radh a-steach IQueueReactorFactory aâ comharrachadh aithnichear ciudha bhon rèiteachadh:
"messaging": {
"ApplicationName": "MyApplication"
},
"rabbitmq": {
"queues": [
{
"id": "myQueue",
"queuename": "lalala",
...
}
]
},
Eisimpleir airson tòiseachadh air èisteachd:
_queueReactorFactory.Register<MyMessageProcessor>("myQueue");
var queueReactor = queueReactorFactory.CreateQueueReactor("myQueue");
queueReactor.StartProcessing();
An uairsin, nuair a thòisicheas an t-seirbheis agus an dòigh air a ghairm gus tòiseachadh air èisteachd, thèid a h-uile teachdaireachd bhon ciudha ainmichte chun phròiseasar co-fhreagarrach.
Gus aon teachdaireachd fhaighinn ann an eadar-aghaidh factaraidh IMessagingComponentFactory tha dòigh-obrach ann CreateMessageReceivera chruthaicheas neach-faighinn aâ feitheamh ri teachdaireachd bhon ciudha a chaidh a shònrachadh dha:
using (var receiver = _messagingComponentFactory.CreateMessageReceiver<TestMessage>("myQueue"))
{
var message = receiver.Receive();
}
Airson teachdaireachd a chuir feumaidh tu an aon rud a chleachdadh IMessagingComponentFactory agus cruthaich neach-cuiridh teachdaireachd:
using (var sender = _messagingComponentFactory.CreateMessageSender<MyMessage>("myQueue"))
{
sender.SendMessage(new MyMessage { Value = ...});
}
Tha trÏ roghainnean deiseil ann airson teachdaireachd a chuir a-steach agus a dhÏ-chlà radh: dÏreach teacsa, XML agus JSON, ach ma tha sin riatanach, is urrainn dhut na gnÏomhan eadar-aghaidh agad fhèin a dhèanamh gu furasta IMessageSerializer и IMessageDeserializer.
Tha sinn air feuchainn ri comasan sònraichte gach manaidsear ciudha a ghlèidheadh, m.e. ViennaNET.Messaging.MQSeriesQueue aâ leigeil leat chan e a-mhĂ in teacsa a chuir, ach cuideachd teachdaireachdan byte, agus ViennaNET.Messaging.RabbitMQQueue aâ toirt taic do shlighean agus ciudha air-itealaich. Bidh an inneal-atharrachaidh againn airson RabbitMQ cuideachd aâ cur an gnĂŹomh beagan semblance de RPC: bidh sinn aâ cur teachdaireachd agus aâ feitheamh ri freagairt bho ciudha sealach sònraichte, a tha air a chruthachadh dĂŹreach airson aon teachdaireachd freagairt.
an seo .
ViennaNET.CallContext
Bidh sinn aâ cleachdadh ciudhaichean chan ann a-mhĂ in airson amalachadh eadar diofar shiostaman, ach cuideachd airson conaltradh eadar microservices den aon iarrtas, mar eisimpleir, taobh a-staigh saga. Dhâ adhbhraich seo gu robh feum air dĂ ta taice leithid logadh a-steach an neach-cleachdaidh, aithnichear iarrtas airson logadh deireadh-gu-deireadh, seòladh IP tĂšsail agus dĂ ta ceadachaidh a chuir a-steach còmhla ris an teachdaireachd. Gus cur air adhart an dĂ ta seo a chuir an gnĂŹomh, leasaich sinn leabharlann ViennaNET.CallContext, a leigeas leat dĂ ta a stòradh bho iarrtas a 'dol a-steach don t-seirbheis. Anns aâ chĂšis seo, chan eil e gu diofar ciamar a chaidh an t-iarrtas a dhèanamh, tro ciudha no tro Http. An uairsin, mus cuir thu an t-iarrtas no an teachdaireachd a-mach, thèid dĂ ta a thoirt bhon cho-theacsa agus a chuir anns na cinn. Mar sin, bidh an ath sheirbheis a 'faighinn an dĂ ta taiceil agus ga riaghladh san aon dòigh.
Tapadh leibh airson ur n-aire, tha sinn a 'coimhead air adhart ri ur beachdan agus tarraing iarrtasan!
Source: www.habr.com
