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,
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 (
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 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
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.*
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 CreateMessageReceiver
ka 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
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