ViennaNET: sraith leabharlann don inneall. Cuid 2

Leanann pobal na bhforbróirí Raiffeisenbank .NET ag déanamh athbhreithniú gairid ar ábhar ViennaNET. Faoi conas agus cén fáth ar tháinig muid go dtí seo, is féidir leat an chéad chuid a léamh.

San Airteagal seo, rachaimid trí leabharlanna atá fós le breithniú chun oibriú le hidirbhearta dáilte, scuainí agus bunachair shonraí, atá le fáil inár stór GitHub (tá foinsí anseo), agus Pacáistí nuget anseo.

ViennaNET: sraith leabharlann don inneall. Cuid 2

ViennaNET.Sagas

Nuair a aistríonn tionscadal chuig ailtireacht DDD agus microservice, ansin nuair a dhéantar loighic gnó a dháileadh ar sheirbhísí éagsúla, tagann fadhb chun cinn a bhaineann leis an ngá atá le meicníocht idirbheart dáilte a chur i bhfeidhm, toisc go mbíonn tionchar ag go leor cásanna go minic ar roinnt réimsí ag an am céanna. Is féidir leat eolas níos mine a fháil ar mheicníochtaí den sórt sin, mar shampla, sa leabhar "Microservices Patterns", Chris Richardson.

Inár dtionscadail, tá meicníocht shimplí ach úsáideach curtha i bhfeidhm againn: saga, nó in áit saga bunaithe ar cheolfhoireann. Is é seo a leanas a bhunúsacht: tá cás gnó áirithe ann ina bhfuil sé riachtanach oibríochtaí a dhéanamh go seicheamhach i seirbhísí éagsúla, agus má thagann aon fhadhbanna chun cinn ag céim ar bith, is gá an nós imeachta um ais-rolladh a ghlaoch le haghaidh gach céim roimhe seo, áit a bhfuil sé. ar fáil. Mar sin, ag deireadh an tsága, beag beann ar rath, faighimid sonraí comhsheasmhach i ngach réimse.

Tá ár gcur i bhfeidhm fós ina bhunfhoirm agus níl sé ceangailte le húsáid aon mhodhanna idirghníomhaíochta le seirbhísí eile. Níl sé deacair é a úsáid: déan sliocht den bhunaicme teibí SagaBase<T>, áit arb é T do rang comhthéacs inar féidir leat na sonraí tosaigh atá riachtanach chun go n-oibreoidh an saga a stóráil, chomh maith le roinnt torthaí idirmheánacha. Cuirfear an cás comhthéacs ar aghaidh chuig gach céim le linn an fhorghníomhaithe. Is aicme gan stát é Saga féin, agus mar sin is féidir an sampla a chur in DI mar Singleton chun na spleáchais riachtanacha a fháil.

Fógra samplach:

public class ExampleSaga : SagaBase<ExampleContext>
{
  public ExampleSaga()
  {
    Step("Step 1")
      .WithAction(c => ...)
      .WithCompensation(c => ...);
	
    AsyncStep("Step 2")
      .WithAction(async c => ...);
  }
}

Glao samplach:

var saga = new ExampleSaga();
var context = new ExampleContext();
await saga.Execute(context);

Is féidir breathnú ar shamplaí iomlána d’fheidhmiúcháin éagsúla anseo agus i dtionól le tástálacha.

VínNET.Orm.*

Sraith leabharlann chun oibriú le bunachair shonraí éagsúla trí Nhibernate. Bainimid úsáid as an gcur chuige DB-First ag baint úsáide as Liquibase, mar sin níl ann ach feidhmiúlacht chun oibriú le sonraí i mbunachar sonraí réidh.

ViennaNET.Orm.Seedwork и ViennaNET.Orm – príomhchóimeálacha ina bhfuil comhéadain bhunúsacha agus a gcur chun feidhme, faoi seach. Breathnaímid ar a n-ábhar go mion.

Comhéadan IEntityFactoryService agus a chur i bhfeidhm EntityFactoryService Is iad seo na príomhphointí tosaigh le bheith ag obair leis an mbunachar sonraí, ós rud é go gcruthaítear an tAonad Oibre, stórtha chun oibriú le haonáin ar leith, chomh maith le seiceadóirí orduithe agus fiosruithe díreacha SQL anseo. Uaireanta bíonn sé áisiúil cumas ranga a theorannú maidir le bheith ag obair le bunachar sonraí, mar shampla, an cumas chun sonraí a léamh amháin a sholáthar. I gcásanna den sórt sin IEntityFactoryService tá sinsear - comhéadan IEntityRepositoryFactory, a dhearbhaíonn ach modh chun stórtha a chruthú.

Chun rochtain dhíreach a fháil ar an mbunachar sonraí, úsáidtear meicníocht an tsoláthraí. Tá a chur i bhfeidhm féin ag gach DBMS a úsáidimid inár bhfoirne: ViennaNET.Orm.MSSQL, ViennaNET.Orm.Oracle, ViennaNET.Orm.SQLite, ViennaNET.Orm.PostgreSql.

Is féidir roinnt soláthraithe a chlárú in aon iarratas amháin ag an am céanna, rud a cheadaíonn, mar shampla, faoi chuimsiú seirbhíse amháin, gan aon chostais as an mbonneagar a mhodhnú, ascnamh céim ar chéim a dhéanamh ó DBMS amháin go ceann eile. Cuirtear an mheicníocht chun an nasc riachtanach a roghnú agus, dá bhrí sin, an soláthraí d’aicme eintitis ar leith (dá scríobhtar mapáil chuig táblaí bunachar sonraí) chun feidhme tríd an eintiteas a chlárú san aicme BoundedContext (tá modh ann chun eintitis fearainn a chlárú) nó a chomharba. ApplicationContext (tá modhanna ann chun aonáin feidhmchláir , iarratais dhíreacha agus orduithe a chlárú), áit a nglactar leis an aitheantóir ceangail ón gcumraíocht mar argóint:

"db": [
  {
    "nick": "mssql_connection",
    "dbServerType": "MSSQL",
    "ConnectionString": "...",
    "useCallContext": true
  },
  {
    "nick": "oracle_connection",
    "dbServerType": "Oracle",
    "ConnectionString": "..."
  }
],

Comhthéacs Feidhmchlár Samplach:

internal sealed class DbContext : ApplicationContext
{
  public DbContext()
  {
    AddEntity<SomeEntity>("mssql_connection");
    AddEntity<MigratedSomeEntity>("oracle_connection");
    AddEntity<AnotherEntity>("oracle_connection");
  }
}

Mura sonraítear an t-aitheantas ceangail, bainfear úsáid as an nasc darb ainm “réamhshocraithe”.

Cuirtear mapáil dhíreach na n-eintiteas chuig táblaí bunachar sonraí i bhfeidhm ag baint úsáide as uirlisí caighdeánacha NHibernate. Is féidir leat an cur síos a úsáid trí chomhaid xml agus trí ranganna. Chun stórtha stub a scríobh go áisiúil i dtrialacha Aonaid, tá leabharlann ann ViennaNET.TestUtils.Orm.

Is féidir samplaí iomlána de ViennaNET.Orm.* a úsáid anseo.

ViennaNET.Teachtaireachtaí.*

Sraith de leabharlanna le haghaidh oibriú le scuainí.

Chun oibriú le scuainí, roghnaíodh an cur chuige céanna agus a roghnaíodh le DBMSanna éagsúla, is é sin, an cur chuige aontaithe uasta a d’fhéadfadh a bheith ann maidir le bheith ag obair leis an leabharlann, beag beann ar an mbainisteoir scuaine a úsáidtear. Leabharlann ViennaNET.Messaging atá freagrach go beacht as an aontú seo, agus ViennaNET.Messaging.MQSeriesQueue, ViennaNET.Messaging.RabbitMQQueue и ViennaNET.Messaging.KafkaQueue cuir i bhfeidhm cuibheoirí le haghaidh IBM MQ, RabbitMQ agus Kafka, faoi seach.

Nuair a bhíonn tú ag obair le scuainí, tá dhá phróiseas ann: teachtaireacht a fháil agus é a sheoladh.

Smaoinigh ar fháil. Tá 2 rogha anseo: éisteacht leanúnach agus teachtaireacht amháin a fháil. Chun éisteacht i gcónaí leis an scuaine, ní mór duit cur síos a dhéanamh ar an rang próiseálaí a fuair tú mar oidhreacht IMessageProcessor, a bheidh freagrach as an teachtaireacht atá ag teacht isteach a phróiseáil. Ansin, ní mór é a “nascadh” le scuaine ar leith; IQueueReactorFactory ag léiriú aitheantóir na scuaine ón gcumraíocht:

"messaging": {
    "ApplicationName": "MyApplication"
},
"rabbitmq": {
    "queues": [
      {
        "id": "myQueue",
        "queuename": "lalala",
        ...
      }
    ]
},

Sampla de tosú ag éisteacht:

_queueReactorFactory.Register<MyMessageProcessor>("myQueue");
var queueReactor = queueReactorFactory.CreateQueueReactor("myQueue");
queueReactor.StartProcessing();

Ansin, nuair a thosaíonn an tseirbhís agus go dtugtar an modh chun éisteacht a thosú, rachaidh gach teachtaireacht ón scuaine sonraithe chuig an bpróiseálaí comhfhreagrach.

Chun teachtaireacht amháin a fháil i gcomhéadan monarchan IMessagingComponentFactory tá modh CreateMessageReceivera chruthóidh faighteoir ag fanacht le teachtaireacht ón scuaine sonraithe dó:

using (var receiver = _messagingComponentFactory.CreateMessageReceiver<TestMessage>("myQueue"))
{
    var message = receiver.Receive();
}

Chun teachtaireacht a sheoladh ní mór duit an rud céanna a úsáid IMessagingComponentFactory agus cruthaigh seoltóir teachtaireachta:

using (var sender = _messagingComponentFactory.CreateMessageSender<MyMessage>("myQueue"))
{
    sender.SendMessage(new MyMessage { Value = ...});
}

Tá trí rogha réamhdhéanta ann chun teachtaireacht a shraithiú agus a dhíshírialú: téacs, XML agus JSON, ach más gá, is féidir leat do chuid feidhmeanna comhéadain féin a dhéanamh go héasca IMessageSerializer и IMessageDeserializer.

Tá iarracht déanta againn cumais uathúla gach bainisteora scuaine a chaomhnú, e.g. ViennaNET.Messaging.MQSeriesQueue is féidir leat a sheoladh ní amháin téacs, ach freisin teachtaireachtaí beart, agus ViennaNET.Messaging.RabbitMQQueue tacaíonn sé le ródú agus scuaine ar an eitilt. Cuireann ár gcumhdach oiriúnaitheora do RabbitMQ roinnt semblance de RPC i bhfeidhm freisin: cuirimid teachtaireacht agus fanaimid le freagra ó scuaine sealadach speisialta, a chruthaítear le haghaidh teachtaireacht freagartha amháin.

Anseo sampla de scuainí a úsáid le nuances ceangail bhunúsacha.

ViennaNET.CallContext

Bainimid úsáid as scuainí, ní hamháin le haghaidh comhtháthú idir córais éagsúla, ach freisin le haghaidh cumarsáide idir microservices den fheidhmchlár céanna, mar shampla, laistigh de saga. Mar thoradh air sin b'éigean sonraí cúnta a tharchur mar aon leis an teachtaireacht mar logáil isteach úsáideora, aitheantóir iarratais don logáil ceann go ceann, seoladh IP foinse agus sonraí údaraithe. Chun cur ar aghaidh na sonraí seo a chur i bhfeidhm, d'fhorbraíomar leabharlann ViennaNET.CallContext, a ligeann duit sonraí a stóráil ó iarratas a thagann isteach sa tseirbhís. Sa chás seo, ní hionann an bealach a rinneadh an t-iarratas, trí scuaine nó trí Http. Ansin, sula seoltar an t-iarratas nó an teachtaireacht amach, tógtar sonraí ón gcomhthéacs agus cuirtear iad sna ceanntásca. Mar sin, faigheann an chéad seirbhís eile na sonraí cúnta agus bainistíonn sí iad ar an mbealach céanna.

Go raibh maith agat as do aire, táimid ag tnúth le do thuairimí agus iarratais a tharraingt!

Foinse: will.com

Add a comment