Le Raiffeisenbank .NET developer community o loʻo faʻaauau pea ona toe iloilo faʻapuupuu mea o loʻo i totonu o ViennaNET. E uiga i le auala ma pe aisea na tatou o mai ai i lenei mea,
I totonu o lenei tusiga, o le a matou uia faletusi e leʻi mafaufauina mo le galulue faʻatasi ma fefaʻatauaʻiga tufatufaina, laina ma faʻamaumauga, lea e mafai ona maua i totonu o le matou GitHub repository (
ViennaNET.Sagas
Pe a sui se poloketi i le DDD ma le microservice architecture, ona faʻasalalau lea o faʻamatalaga pisinisi i 'auʻaunaga eseese, e tulaʻi mai se faʻafitauli e fesoʻotaʻi ma le manaʻoga e faʻatino se faʻasalalauga fefaʻatauaʻiga, aua o le tele o faʻaaliga e masani ona aʻafia ai le tele o vaega i le taimi e tasi. E mafai ona e faʻamasani i ia masini i nisi auiliiliga, mo se faʻataʻitaʻiga,
I a matou poloketi, ua matou faʻatinoina se faiga faigofie ae aoga: o se saga, poʻo se faʻasologa faʻavae saga. O lona uiga e faʻapea: o loʻo i ai se faʻataʻitaʻiga pisinisi lea e tatau ai ona faʻagasolo faʻagaioiga i auaunaga eseese, ma afai ei ai ni faʻafitauli e tulaʻi mai i soʻo se laasaga, e tatau ona valaʻau le rollback procedure mo laasaga uma muamua, pe a iai. saunia. O le mea lea, i le faaiuga o le saga, e tusa lava po o le a le manuia, matou te maua faʻamaumauga tumau i vaega uma.
O loʻo faia pea la matou faʻatinoga i lona tulaga faʻavae ma e le o noatia i le faʻaogaina o soʻo se auala o fegalegaleaiga ma isi auaunaga. E le faigata ona faʻaoga: naʻo le faia o se tupuaga o le vasega abstract base SagaBase<T>, o le T o lau vasega faʻasalalauga lea e mafai ona e teuina ai faʻamatalaga muamua e manaʻomia mo le saga e galue, faʻapea foʻi ma nisi faʻaiʻuga. O le fa'ata'ita'iga fa'ata'ita'iga o le a tu'uina atu i la'asaga uma i le taimi o le fa'atinoga. Saga lava ia o se vasega e leai ni setete, o lea e mafai ai ona tuʻuina le faʻataʻitaʻiga i DI o se Singleton e maua ai faʻalagolago talafeagai.
Fa'ata'ita'iga fa'asalalauga:
public class ExampleSaga : SagaBase<ExampleContext>
{
public ExampleSaga()
{
Step("Step 1")
.WithAction(c => ...)
.WithCompensation(c => ...);
AsyncStep("Step 2")
.WithAction(async c => ...);
}
}
Fa'ata'ita'iga vala'au:
var saga = new ExampleSaga();
var context = new ExampleContext();
await saga.Execute(context);
E mafai ona va'aia fa'ata'ita'iga atoatoa o fa'atinoga 'ese'ese
ViennaNET.Orm.*
Se seti o faletusi mo le galulue faatasi ma faʻamaumauga eseese e ala i le Nhibernate. Matou te faʻaogaina le DB-First approach e faʻaaoga ai le Liquibase, o lea e naʻo le faʻatinoina o galuega mo le galue ma faʻamaumauga i totonu o se faʻamaumauga ua saunia.
ViennaNET.Orm.Seedwork и ViennaNET.Orm
- fa'apotopotoga autu o lo'o iai feso'ota'iga fa'avae ma a latou fa'atinoga, fa'asologa. Seʻi o tatou vaʻavaʻai atili i mea o loʻo i totonu.
Ofisa IEntityFactoryService
ma lona faatinoina EntityFactoryService
o le amataga autu lea mo le galulue faatasi ma le database, talu ai o le Unit of Work, fale teu oloa mo le galulue faatasi ma faʻalapotopotoga faʻapitoa, faʻapea foʻi ma faʻatonuina o faʻatonuga ma fesili tuusaʻo SQL o loʻo faia iinei. O nisi taimi e faigofie le faʻatapulaʻaina o gafatia o se vasega mo le galue ma se faʻamaumauga, mo se faʻataʻitaʻiga, e tuʻuina atu le mafai e naʻo le faitau faʻamatalaga. Mo tulaga faapena IEntityFactoryService
o lo'o i ai se tuaa - fa'afeso'ota'i IEntityRepositoryFactory
, lea e naʻo le faʻaalia o se auala mo le fatuina o fale teu oloa.
Ina ia maua saʻo le faʻamaumauga, o loʻo faʻaogaina le masini e tuʻuina atu. O DBMS taʻitasi matou te faʻaogaina i a matou 'au e iai lana lava faʻatinoga: ViennaNET.Orm.MSSQL, ViennaNET.Orm.Oracle, ViennaNET.Orm.SQLite, ViennaNET.Orm.PostgreSql
.
I le taimi lava e tasi, e tele kamupani e mafai ona resitalaina i le tasi talosaga i le taimi e tasi, lea e mafai ai, mo se faʻataʻitaʻiga, i totonu o le auʻaunaga e tasi, e aunoa ma se tau mo le faʻaleleia o atinaʻe, e faia ai se laʻasaga taʻitasi laʻasaga mai le tasi DBMS i le isi. O le faiga mo le filifilia o le fesoʻotaʻiga manaʻomia ma, o le mea lea, o le tuʻuina atu mo se vasega faʻapitoa (lea o loʻo tusia ai faʻafanua i laulau faʻamaumauga) e faʻatinoina e ala i le resitalaina o le faʻalapotopotoga i le vasega BoundedContext (o loʻo i ai se metotia mo le resitalaina o faʻalapotopotoga) poʻo lona sui. ApplicationContext (o loʻo i ai metotia mo le resitalaina o faʻalapotopotoga talosaga, talosaga tuusaʻo ma faʻatonuga), lea e talia ai le faʻamatalaga fesoʻotaʻiga mai le faʻatulagaga e fai ma finauga:
"db": [
{
"nick": "mssql_connection",
"dbServerType": "MSSQL",
"ConnectionString": "...",
"useCallContext": true
},
{
"nick": "oracle_connection",
"dbServerType": "Oracle",
"ConnectionString": "..."
}
],
Faataitaiga ApplicationContext:
internal sealed class DbContext : ApplicationContext
{
public DbContext()
{
AddEntity<SomeEntity>("mssql_connection");
AddEntity<MigratedSomeEntity>("oracle_connection");
AddEntity<AnotherEntity>("oracle_connection");
}
}
Afai e le o faʻamaonia le ID fesoʻotaʻiga, ona faʻaogaina lea o le fesoʻotaʻiga ua taʻua o le "default".
O fa'afanua tu'usa'o o fa'alapotopotoga i laulau fa'amaumauga o lo'o fa'atinoina i le fa'aogaina o meafaigaluega masani a le NHibernate. E mafai ona e faʻaogaina le faʻamatalaga e ala i faila xml ma vasega. Mo le faigofie ona tusia o fale teu oloa i su'ega Unit, o lo'o iai le faletusi ViennaNET.TestUtils.Orm
.
O fa'ata'ita'iga atoa o le fa'aogaina o ViennaNET.Orm.* e mafai ona maua
ViennaNET.Messaging.*
Se seti o faletusi mo le galue i laina.
Ina ia galue ma laina, o le auala lava lea e tasi na filifilia e pei o DBMS eseese, o lona uiga, o le maualuga e mafai ona tuʻufaʻatasia auala e tusa ai ma le galue ma le faletusi, e tusa lava po o le a le pule o loʻo faʻaaogaina. Faletusi ViennaNET.Messaging
e nafa tonu lava mo lenei tuufaatasia, ma ViennaNET.Messaging.MQSeriesQueue, ViennaNET.Messaging.RabbitMQQueue и ViennaNET.Messaging.KafkaQueue
o lo'o i ai fa'atinoga fa'apipi'i mo IBM MQ, RabbitMQ ma Kafka.
Pe a galue ma laina, e lua faiga: mauaina o se savali ma auina atu.
Mafaufau e maua. E 2 filifiliga iinei: mo le faʻalogo faifaipea ma mo le mauaina o se savali e tasi. Ina ia faʻalogo i taimi uma i le laina, e tatau ona e faʻamatala muamua le vasega processor na maua mai IMessageProcessor
, lea o le a nafa ma le faagasologa o le savali o loʻo oʻo mai. O le isi, e tatau ona "sootai" i se laina patino; e faia lea e ala i le resitalaina i totonu IQueueReactorFactory
fa'aalia le fa'ailoga fa'ailoga mai le fa'atulagaina:
"messaging": {
"ApplicationName": "MyApplication"
},
"rabbitmq": {
"queues": [
{
"id": "myQueue",
"queuename": "lalala",
...
}
]
},
Faataitaiga o le amata faalogo:
_queueReactorFactory.Register<MyMessageProcessor>("myQueue");
var queueReactor = queueReactorFactory.CreateQueueReactor("myQueue");
queueReactor.StartProcessing();
Ma, pe a amata le auaunaga ma valaʻau le auala e amata faʻalogo ai, o feʻau uma mai le faʻailoga faʻapitoa o le a alu i le gaioiga talafeagai.
Ina ia maua se savali e tasi i totonu o se fale gaosi oloa IMessagingComponentFactory
e iai se metotia CreateMessageReceiver
lea o le a fatuina ai se tagata e mauaina e faʻatali mo se feʻau mai le laina faʻamaonia i ai:
using (var receiver = _messagingComponentFactory.CreateMessageReceiver<TestMessage>("myQueue"))
{
var message = receiver.Receive();
}
E auina atu se savali e tatau ona e faʻaaogaina tutusa IMessagingComponentFactory
ma fai se tagata e auina atu savali:
using (var sender = _messagingComponentFactory.CreateMessageSender<MyMessage>("myQueue"))
{
sender.SendMessage(new MyMessage { Value = ...});
}
E tolu filifiliga ua saunia mo le faʻasalalauina ma le faʻaleagaina o se feʻau: naʻo le tusiga, XML ma le JSON, ae afai e manaʻomia, e faigofie ona e faia au oe lava faʻatinoga faʻaoga. IMessageSerializer и IMessageDeserializer
.
Sa matou taumafai e faʻasaoina le gafatia tulaga ese o pule taʻitasi taʻitasi, eg. ViennaNET.Messaging.MQSeriesQueue
e mafai ai ona e auina atu e le gata i tusitusiga, ae faapea foi savali byte, ma ViennaNET.Messaging.RabbitMQQueue
lagolagoina le ta'avale ma le fa'asologa o laina. O la matou fa'apipi'i fa'apipi'i mo RabbitMQ o lo'o fa'atinoina fo'i se fa'atusa o le RPC: matou te lafo atu se fe'au ma fa'atali se tali mai se laina fa'apitoa le tumau, lea e faia mo na'o le tasi le fe'au tali.
iinei
ViennaNET.CallContext
Matou te faʻaogaina laina e le gata mo le tuʻufaʻatasia i le va o faiga eseese, ae faʻapea foʻi mo fesoʻotaʻiga i le va o microservices o le talosaga lava e tasi, mo se faʻataʻitaʻiga, i totonu o se saga. O lenei mea na mafua ai le manaʻoga e tuʻuina atu faʻatasi ma le feʻau faʻamatalaga fesoasoani e pei o le saini a le tagata faʻaoga, faʻamatalaga faʻamatalaga mo le faʻauʻuga pito i luga, tuatusi IP puna ma faʻamatalaga faʻatagaina. Ina ia faʻatinoina le tuʻuina atu o nei faʻamatalaga, matou fausia se faletusi ViennaNET.CallContext
, lea e mafai ai ona e teuina faʻamatalaga mai se talosaga e ulufale i le auaunaga. I lenei tulaga, pe na faapefea ona faia le talosaga, e ala i se laina poʻo le Http, e le afaina. Ma, aʻo leʻi tuʻuina atu le talosaga i fafo poʻo le feʻau, e ave faʻamaumauga mai le tala ma tuʻu i totonu o ulutala. O le mea lea, o le isi auʻaunaga e mauaina faʻamaumauga fesoasoani ma faʻatautaia i le auala lava e tasi.
Faafetai mo lou gauai, matou te tulimatai atu i au faʻamatalaga ma toso talosaga!
puna: www.habr.com