ViennaNET: he huinga whare pukapuka mo te tuara. Wāhanga 2

Kei te arotake poto te hapori kaiwhakawhanake Raiffeisenbank .NET i nga korero o ViennaNET. Mo te pehea me te take i tae mai ai matou ki tenei, ka taea e koe te panui i te waahanga tuatahi.

I roto i tenei tuhinga, ka tirotirohia e matou nga whare pukapuka e kore e whakaarohia mo te mahi me nga whakawhitinga tohatoha, nga rarangi me nga papaa raraunga, ka kitea i roto i ta maatau putunga GitHub (kei konei nga puna), me Nga putea Nuget i konei.

ViennaNET: he huinga whare pukapuka mo te tuara. Wāhanga 2

ViennaNET.Sagas

Ka huri te kaupapa ki te DDD me te hoahoanga microservice, ka tohatohahia te arorau pakihi puta noa i nga ratonga rereke, ka puta he raruraru e pa ana ki te hiahia ki te whakatinana i tetahi tikanga tauwhitinga tohatoha, na te mea he maha nga ahuatanga ka pa ki nga waahi maha i te wa kotahi. Ka taea e koe te mohio ki nga momo miihini i roto i nga korero taipitopito, hei tauira, i roto i te pukapuka "Microservices Patterns", Chris Richardson.

I roto i a maatau kaupapa, kua whakatinanahia e matou he tikanga ngawari engari he mea whai hua: he putaputa, he putaputa-whakaahua ranei. Ko te tino kaupapa e whai ake nei: tera ano tetahi ahuatanga pakihi e tika ana ki te mahi i nga mahi i roto i nga ratonga rereke, a, ki te puta he raruraru i tetahi waahanga, me waea atu ki te tikanga hurihuri mo nga waahanga o mua, kei hea. whakaratohia. No reira, i te mutunga o te putaputa, ahakoa te angitu, ka whiwhi tatou i nga raraunga rite tonu ki nga rohe katoa.

Ko ta tatou whakatinanatanga kei te hanga tonu i roto i tona ahua taketake, kaore i te herea ki te whakamahi i nga tikanga o te taunekeneke me etahi atu ratonga. Ehara i te mea uaua ki te whakamahi: hanga noa he uri o te karaehe waitara turanga SagaBase<T>, kei reira ko T to karaehe horopaki ka taea e koe te penapena i nga raraunga tuatahi e tika ana kia mahi te putaputa, me etahi hua takawaenga. Ka tukuna te tauira horopaki ki nga hikoinga katoa i te wa e mahia ana. Ko Saga ano he karaehe koretake, na reira ka taea te whakanoho i te tauira ki te DI hei Singleton ki te tiki i nga whakawhirinaki e tika ana.

Tauira pānuitanga:

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

Tauira waea:

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

Ka taea te kite i nga tauira katoa o nga whakatinanatanga rereke konei me te huihui tahi whakamātautau.

ViennaNET.Orm.*

He huinga whare pukapuka mo te mahi me nga momo putunga korero ma Nhibernate. Ka whakamahia e matou te huarahi DB-Tuatahi ma te whakamahi i te Liquibase, na reira he mahi anake mo te mahi me nga raraunga i roto i te papaarangi kua rite.

ViennaNET.Orm.Seedwork и ViennaNET.Orm – ko nga huihuinga matua kei roto nga atanga taketake me o raatau whakatinanatanga. Kia ata tirohia nga korero o roto.

atanga IEntityFactoryService me tona whakatinanatanga EntityFactoryService Ko te timatanga matua mo te mahi me te papaaarangi, mai i te Waenga Mahi, ka hangaia nga putunga mo te mahi me nga hinonga motuhake, tae atu ki nga kaihautu o nga whakahau me nga patai SQL tika ka hangaia i konei. I etahi wa he watea ki te whakawhäiti i nga kaha o te akomanga mo te mahi me te paataka raraunga, hei tauira, ki te whakarato i te kaha ki te panui raraunga anake. Mo nga keehi penei IEntityFactoryService he tupuna - atanga IEntityRepositoryFactory, e whakaatu ana i tetahi tikanga mo te hanga putunga.

Ki te uru tika ki te papaunga raraunga, ka whakamahia te tikanga kaiwhakarato. Ko ia DBMS e whakamahia ana e matou i roto i o taatau roopu he whakatinanatanga ake: ViennaNET.Orm.MSSQL, ViennaNET.Orm.Oracle, ViennaNET.Orm.SQLite, ViennaNET.Orm.PostgreSql.

I te wa ano, he maha nga kaiwhakarato ka taea te rehita i roto i te tono kotahi i te wa ano, ka taea, hei tauira, i roto i te anga o te ratonga kotahi, kaore he utu mo te whakarereke i nga hanganga, ki te kawe i te heke mai i te taahiraa. tetahi DBMS ki tetahi. Ko te tikanga mo te kowhiri i te hononga e hiahiatia ana, a, na reira, ko te kaiwhakarato mo tetahi karaehe hinonga motuhake (e tuhia ai te mapi ki nga ripanga raraunga) ka whakatinanahia ma te rehitatanga o te hinonga i roto i te akomanga BoundedContext (kei roto he tikanga mo te rehita hinonga rohe) me tona kaiwhakakapi. ApplicationContext (kei roto nga tikanga mo te rehita i nga hinonga tono , nga tono tika me nga tono), ka whakaaehia te tohu hononga mai i te whirihoranga hei tohenga:

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

Tauira Horopaki Taupānga:

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

Mena kaore i tohua te ID hononga, ka whakamahia te hononga i tapaina "taunoa".

Ka whakatinanahia te mapi tika o nga hinonga ki nga ripanga putunga ma te whakamahi i nga taputapu paerewa NHibernate. Ka taea e koe te whakamahi i te whakaahuatanga ma nga konae xml me nga karaehe. Mo te pai o te tuhi o nga putunga stub i roto i nga whakamatautau Waehe, he whare pukapuka ViennaNET.TestUtils.Orm.

Ka kitea nga tauira katoa mo te whakamahi ViennaNET.Orm.* konei.

ViennaNET.Messaging.*

He huinga whare pukapuka mo te mahi me nga rarangi.

Ki te mahi me nga rarangi, ko te huarahi ano i whiriwhiria me nga momo DBMS, ara, ko te tino huarahi whakakotahi e taea ana mo te mahi me te whare pukapuka, ahakoa he aha te kaiwhakahaere o te rarangi i whakamahia. Whare Pukapuka ViennaNET.Messaging ko ia tonu te kawenga mo tenei whakakotahitanga, a ViennaNET.Messaging.MQSeriesQueue, ViennaNET.Messaging.RabbitMQQueue и ViennaNET.Messaging.KafkaQueue kei roto nga whakaurunga urutau mo IBM MQ, RabbitMQ me Kafka, ia.

I te wa e mahi ana me nga rarangi, e rua nga tukanga: te whiwhi karere me te tuku.

Whakaarohia te whiwhi. E rua nga whiringa i konei: mo te whakarongo tonu me te whiwhi karere kotahi. Ki te whakarongo tonu ki te tūtira, me whakaahua tuatahi koe i te akomanga pūtukatuka i tuku iho IMessageProcessor, ko wai te kawenga mo te tukatuka i te karere taumai. I muri mai, me "hono" ki tetahi rarangi motuhake; ka mahia tenei ma te rehitatanga i roto IQueueReactorFactory e tohu ana i te tautohu tūtira mai i te whirihoranga:

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

He tauira mo te tiimata whakarongo:

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

Na, ka timata te ratonga ka karangahia te tikanga ki te timata ki te whakarongo, ka haere nga karere katoa mai i te rarangi kua tohua ki te tukatuka e pa ana.

Ki te whiwhi karere kotahi i roto i te atanga wheketere IMessagingComponentFactory he tikanga CreateMessageReceiverka hanga he kaiwhiwhi e tatari ana mo tetahi karere mai i te rarangi kua tohua ki a ia:

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

Hei tuku karere me whakamahi ano koe IMessagingComponentFactory ka hanga he kaituku karere:

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

E toru nga waahanga kua rite mo te raupapa me te whakakore i tetahi karere: ko te kuputuhi noa, te XML me te JSON, engari ki te tika, ka taea e koe te hanga i a koe ake mahinga atanga. IMessageSerializer и IMessageDeserializer.

Kua ngana matou ki te pupuri i nga kaha ahurei o ia kaiwhakahaere o te rarangi, hei tauira. ViennaNET.Messaging.MQSeriesQueue ka taea e koe ki te tuku i te kuputuhi anake, engari ano hoki nga karere paita, me ViennaNET.Messaging.RabbitMQQueue e tautoko ana i te ararere me te rarangi i runga i te rere. Ko ta matou takai urutau mo RabbitMQ ka whakatinana ano i etahi ahua o te RPC: ka tukuna he karere ka tatari mo te whakautu mai i tetahi rarangi rangitahi motuhake, ka hangaia mo te karere whakautu kotahi anake.

konei he tauira mo te whakamahi i nga rarangi me nga ahuatanga hononga taketake.

ViennaNET.CallContext

Ka whakamahia e matou nga rarangi mo te whakauru i waenga i nga punaha rereke, engari mo te whakawhitiwhiti korero i waenga i nga ratonga miihini o te tono kotahi, hei tauira, i roto i te saga. Na tenei i puta te hiahia ki te tuku me te karere nga raraunga awhina penei i te takiuru kaiwhakamahi, tono tohu mo te takiuru mutunga-ki-mutunga, te wahitau IP puna me te raraunga whakamana. Hei whakatinana i te tuku whakamua o enei raraunga, i whakawhanakehia e matou he whare pukapuka ViennaNET.CallContext, ka taea e koe te penapena raraunga mai i te tono e uru ana ki te ratonga. I tenei keehi, me pehea te tono, ma te rarangi, ma te Http ranei, kaore he take. Na, i mua i te tuku i te tono, i te karere ranei, ka tangohia nga raraunga mai i te horopaki ka tuu ki nga pane. Na, ko te ratonga e whai ake nei ka whiwhi i nga raraunga awhina me te whakahaere i te huarahi ano.

Ka mihi ki a koe mo to aro, ka tatari matou ki o korero me o tono toia!

Source: will.com

Tāpiri i te kōrero