ВиСннаНЕВ: скуп Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° ΠΏΠΎΠ·Π°Π΄ΠΈΠ½Ρƒ. Π”Π΅ΠΎ 2

Π—Π°Ρ˜Π΅Π΄Π½ΠΈΡ†Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€Π° РаиффСисСнбанк .НЕВ наставља са ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΌ ΠΏΡ€Π΅Π³Π»Π΅Π΄ΠΎΠΌ ΡΠ°Π΄Ρ€ΠΆΠ°Ρ˜Π° ВиСннаНЕВ-Π°. О Ρ‚ΠΎΠΌΠ΅ ΠΊΠ°ΠΊΠΎ ΠΈ Π·Π°ΡˆΡ‚ΠΎ смо дошли Π΄ΠΎ ΠΎΠ²ΠΎΠ³Π°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΠΈ ΠΏΡ€Π²ΠΈ Π΄Π΅ΠΎ.

Π£ ΠΎΠ²ΠΎΠΌ Ρ‡Π»Π°Π½ΠΊΡƒ Ρ›Π΅ΠΌΠΎ ΠΏΡ€ΠΎΡ›ΠΈ ΠΊΡ€ΠΎΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ којС Ρ‚Π΅ΠΊ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС Ρ€Π°Π·ΠΌΠΎΡ‚Ρ€ΠΈ Π·Π° Ρ€Π°Π΄ са дистрибуираним Ρ‚Ρ€Π°Π½ΡΠ°ΠΊΡ†ΠΈΡ˜Π°ΠΌΠ°, Ρ€Π΅Π΄ΠΎΠ²ΠΈΠΌΠ° ΠΈ Π±Π°Π·Π°ΠΌΠ° ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ°, којС сС ΠΌΠΎΠ³Ρƒ Π½Π°Ρ›ΠΈ Ρƒ нашСм Π“ΠΈΡ‚Π₯ΡƒΠ± Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌΡƒ (ΠΈΠ·Π²ΠΎΡ€ΠΈ су ΠΎΠ²Π΄Π΅), ΠΈ НугСт ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ ΠΎΠ²Π΄Π΅.

ВиСннаНЕВ: скуп Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° ΠΏΠΎΠ·Π°Π΄ΠΈΠ½Ρƒ. Π”Π΅ΠΎ 2

ВиСннаНЕВ.Багас

Када сС ΠΏΡ€ΠΎΡ˜Π΅ΠΊΠ°Ρ‚ ΠΏΡ€Π΅Π±Π°Ρ†ΠΈ Π½Π° Π”Π”Π” ΠΈ микросСрвисну Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ, ΠΎΠ½Π΄Π° ΠΊΠ°Π΄Π° сС пословна Π»ΠΎΠ³ΠΈΠΊΠ° дистрибуира Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚Π΅ сСрвисС, Π½Π°ΡΡ‚Π°Ρ˜Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π²Π΅Π·Π°Π½ Π·Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Ρƒ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° дистрибуиранС Ρ‚Ρ€Π°Π½ΡΠ°ΠΊΡ†ΠΈΡ˜Π΅, Ρ˜Π΅Ρ€ ΠΌΠ½ΠΎΠ³ΠΈ ΡΡ†Π΅Π½Π°Ρ€ΠΈΡ˜ΠΈ чСсто ΡƒΡ‚ΠΈΡ‡Ρƒ Π½Π° Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ Π΄ΠΎΠΌΠ΅Π½Π° одјСдном. ΠœΠΎΠΆΠ΅Ρ‚Π΅ сС Π΄Π΅Ρ‚Π°Ρ™Π½ΠΈΡ˜Π΅ ΡƒΠΏΠΎΠ·Π½Π°Ρ‚ΠΈ са Ρ‚Π°ΠΊΠ²ΠΈΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΈΠΌΠ°, Π½ΠΏΡ€. Ρƒ књизи β€žΠœΠΈΡ†Ρ€ΠΎΡΠ΅Ρ€Π²ΠΈΡ†Π΅Ρ ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρβ€œ, ΠšΡ€ΠΈΡ Ричардсон.

Π£ нашим ΠΏΡ€ΠΎΡ˜Π΅ΠΊΡ‚ΠΈΠΌΠ° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π»ΠΈ смо Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π°Π½, Π°Π»ΠΈ користан ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·Π°ΠΌ: сагу, односно сагу засновану Π½Π° ΠΎΡ€ΠΊΠ΅ΡΡ‚Ρ€Π°Ρ†ΠΈΡ˜ΠΈ. ЊСгова ΡΡƒΡˆΡ‚ΠΈΠ½Π° јС слСдСћа: ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ ΠΎΠ΄Ρ€Π΅Ρ’Π΅Π½ΠΈ пословни сцСнарио Ρƒ ΠΊΠΎΠΌΠ΅ јС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ ΡΠ΅ΠΊΠ²Π΅Π½Ρ†ΠΈΡ˜Π°Π»Π½ΠΎ ΠΎΠ±Π°Π²Ρ™Π°Ρ‚ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ˜Π΅ Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΠΈΠΌ сСрвисима, Π° Π°ΠΊΠΎ сС Ρƒ Π±ΠΈΠ»ΠΎ ΠΊΠΎΠΌ ΠΊΠΎΡ€Π°ΠΊΡƒ појавС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ јС ΠΏΠΎΠ·Π²Π°Ρ‚ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ Π²Ρ€Π°Ρ›Π°ΡšΠ° Π·Π° свС ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½Π΅ ΠΊΠΎΡ€Π°ΠΊΠ΅, Π³Π΄Π΅ јС ΠΎΠ±Π΅Π·Π±Π΅Ρ’Π΅Π½ΠΎ. Π’Π°ΠΊΠΎ, Π½Π° ΠΊΡ€Π°Ρ˜Ρƒ сагС, Π±Π΅Π· ΠΎΠ±Π·ΠΈΡ€Π° Π½Π° успСх, добијамо дослСднС ΠΏΠΎΠ΄Π°Ρ‚ΠΊΠ΅ Ρƒ свим Π΄ΠΎΠΌΠ΅Π½ΠΈΠΌΠ°.

Наша ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° јС ΠΈ Π΄Π°Ρ™Π΅ Π½Π°ΠΏΡ€Π°Π²Ρ™Π΅Π½Π° Ρƒ свом основном ΠΎΠ±Π»ΠΈΠΊΡƒ ΠΈ нијС Π²Π΅Π·Π°Π½Π° Π·Π° ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ΅ Π±ΠΈΠ»ΠΎ ΠΊΠ°ΠΊΠ²ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ†ΠΈΡ˜Π΅ са Π΄Ρ€ΡƒΠ³ΠΈΠΌ сСрвисима. НијС Ρ‚Π΅ΡˆΠΊΠΎ користити: само Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° основнС апстрактнС класС БагаБасС<Π’>, Π³Π΄Π΅ јС Π’ ваша контСкстуална класа Ρƒ којој ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡƒΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΡ‡Π΅Ρ‚Π½Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΊΠ΅ Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½Π΅ Π΄Π° Π±ΠΈ сага функционисала, ΠΊΠ°ΠΎ ΠΈ Π½Π΅ΠΊΠ΅ ΠΌΠ΅Ρ’ΡƒΡ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π΅. Π˜Π½ΡΡ‚Π°Π½Ρ†Π° контСкста Ρ›Π΅ Π±ΠΈΡ‚ΠΈ прослСђСна свим ΠΊΠΎΡ€Π°Ρ†ΠΈΠΌΠ° Ρ‚ΠΎΠΊΠΎΠΌ ΠΈΠ·Π²Ρ€ΡˆΠ°Π²Π°ΡšΠ°. Π‘Π°ΠΌΠ° Π‘Π°Π³Π° јС класа Π±Π΅Π· ΡΡ‚Π°ΡšΠ°, Ρ‚Π°ΠΊΠΎ Π΄Π° сС инстанца ΠΌΠΎΠΆΠ΅ ставити Ρƒ Π”Π˜ ΠΊΠ°ΠΎ Π‘ΠΈΠ½Π³Π»Π΅Ρ‚ΠΎΠ½ Π΄Π° Π±ΠΈ сС Π΄ΠΎΠ±ΠΈΠ»Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π΅ зависности.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ огласа:

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ·ΠΈΠ²Π°:

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

ΠœΠΎΠ³Ρƒ сС Π²ΠΈΠ΄Π΅Ρ‚ΠΈ ΠΏΡƒΠ½ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΠΈΡ… ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° ΠΎΠ²Π΄Π΅ Π° Ρƒ ΡΠΊΡƒΠΏΡˆΡ‚ΠΈΠ½ΠΈ са тСстови.

ВиСннаНЕВ.ΠžΡ€ΠΌ.*

Π‘ΠΊΡƒΠΏ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° Ρ€Π°Π΄ са Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΠΈΠΌ Π±Π°Π·Π°ΠΌΠ° ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ° ΠΏΡ€Π΅ΠΊΠΎ НхибСрнатС-Π°. ΠšΠΎΡ€ΠΈΡΡ‚ΠΈΠΌΠΎ Π”Π‘-Ѐирст приступ користСћи ЛикуибасС, Ρ‚Π°ΠΊΠΎ Π΄Π° ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ само функционалност Π·Π° Ρ€Π°Π΄ са ΠΏΠΎΠ΄Π°Ρ†ΠΈΠΌΠ° Ρƒ Π³ΠΎΡ‚ΠΎΠ²ΠΎΡ˜ Π±Π°Π·ΠΈ ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ°.

ViennaNET.Orm.Seedwork ΠΈ ViennaNET.Orm – Π³Π»Π°Π²Π½ΠΈ склопови који садрТС основнС ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜ΡΠ΅ ΠΈ ΡšΠΈΡ…ΠΎΠ²Π΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅, рСспСктивно. ПоглСдајмо ΡšΠΈΡ…ΠΎΠ² ΡΠ°Π΄Ρ€ΠΆΠ°Ρ˜ Π΄Π΅Ρ‚Π°Ρ™Π½ΠΈΡ˜Π΅.

interfejs IEntityFactoryService ΠΈ ΡšΠ΅Π³ΠΎΠ²Ρƒ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Ρƒ EntityFactoryService су Π³Π»Π°Π²Π½Π° ΠΏΠΎΠ»Π°Π·Π½Π° Ρ‚Π°Ρ‡ΠΊΠ° Π·Π° Ρ€Π°Π΄ са Π±Π°Π·ΠΎΠΌ ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ°, Π±ΡƒΠ΄ΡƒΡ›ΠΈ Π΄Π° сС ΠΎΠ²Π΄Π΅ ΠΊΡ€Π΅ΠΈΡ€Π°Ρ˜Ρƒ ΠˆΠ΅Π΄ΠΈΠ½ΠΈΡ†Π° Ρ€Π°Π΄Π°, ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π° Π·Π° Ρ€Π°Π΄ са ΠΎΠ΄Ρ€Π΅Ρ’Π΅Π½ΠΈΠΌ Π΅Π½Ρ‚ΠΈΡ‚Π΅Ρ‚ΠΈΠΌΠ°, ΠΊΠ°ΠΎ ΠΈ ΠΈΠ·Π²Ρ€ΡˆΠΈΠΎΡ†ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΈ Π‘ΠšΠ› ΡƒΠΏΠΈΡ‚ΠΈ. ПонСкад јС Π·Π³ΠΎΠ΄Π½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΠΈ могућности класС Π·Π° Ρ€Π°Π΄ са Π±Π°Π·ΠΎΠΌ ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ°, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π° сС ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ могућност само Ρ‡ΠΈΡ‚Π°ΡšΠ° ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ°. Π—Π° Ρ‚Π°ΠΊΠ²Π΅ ΡΠ»ΡƒΡ‡Π°Ρ˜Π΅Π²Π΅ IEntityFactoryService ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ ΠΏΡ€Π΅Π΄Π°ΠΊ – ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜Ρ IEntityRepositoryFactory, који само Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡˆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π°.

Π—Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π°Π½ приступ Π±Π°Π·ΠΈ ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ° користи сС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·Π°ΠΌ ΠΏΡ€ΠΎΠ²Π°Ρ˜Π΄Π΅Ρ€Π°. Π‘Π²Π°ΠΊΠΈ Π”Π‘ΠœΠ‘ који користимо Ρƒ нашим Ρ‚ΠΈΠΌΠΎΠ²ΠΈΠΌΠ° ΠΈΠΌΠ° ΡΠ²ΠΎΡ˜Ρƒ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Ρƒ: ViennaNET.Orm.MSSQL, ViennaNET.Orm.Oracle, ViennaNET.Orm.SQLite, ViennaNET.Orm.PostgreSql.

Π˜ΡΡ‚ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½ΠΎ, вишС ΠΏΡ€ΠΎΠ²Π°Ρ˜Π΄Π΅Ρ€Π° ΠΌΠΎΠΆΠ΅ Π±ΠΈΡ‚ΠΈ рСгистровано Ρƒ јСдној Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜ΠΈ истоврСмСно, ΡˆΡ‚ΠΎ ΠΎΠΌΠΎΠ³ΡƒΡ›Π°Π²Π°, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρƒ ΠΎΠΊΠ²ΠΈΡ€Ρƒ јСдног сСрвиса, Π±Π΅Π· ΠΈΠΊΠ°ΠΊΠ²ΠΈΡ… Ρ‚Ρ€ΠΎΡˆΠΊΠΎΠ²Π° Π·Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ инфраструктурС, Π΄Π° ΠΈΠ·Π²Ρ€ΡˆΠΈ ΠΊΠΎΡ€Π°ΠΊ ΠΏΠΎ ΠΊΠΎΡ€Π°ΠΊ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡ˜Ρƒ са јСдан Π”Π‘ΠœΠ‘ Ρƒ Π΄Ρ€ΡƒΠ³ΠΈ. ΠœΠ΅Ρ…Π°Π½ΠΈΠ·Π°ΠΌ Π·Π° ΠΈΠ·Π±ΠΎΡ€ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π΅ Π²Π΅Π·Π΅, Π° самим Ρ‚ΠΈΠΌ ΠΈ ΠΏΡ€ΠΎΠ²Π°Ρ˜Π΄Π΅Ρ€Π° Π·Π° ΠΎΠ΄Ρ€Π΅Ρ’Π΅Π½Ρƒ класу Π΅Π½Ρ‚ΠΈΡ‚Π΅Ρ‚Π° (Π·Π° ΠΊΠΎΡ˜Ρƒ сС пишС ΠΌΠ°ΠΏΠΈΡ€Π°ΡšΠ΅ Ρƒ Ρ‚Π°Π±Π΅Π»Π΅ Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ°) сС ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π° ΠΊΡ€ΠΎΠ· Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡ˜Ρƒ Π΅Π½Ρ‚ΠΈΡ‚Π΅Ρ‚Π° Ρƒ класу Π‘ΠΎΡƒΠ½Π΄Π΅Π΄Π¦ΠΎΠ½Ρ‚Π΅ΠΊΡ‚ (садрТи ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡ˜Ρƒ Π΅Π½Ρ‚ΠΈΡ‚Π΅Ρ‚Π° Π΄ΠΎΠΌΠ΅Π½Π°) ΠΈΠ»ΠΈ њСговог наслСдника. АпплицатионЦонтСкт (садрТи ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Π·Π° Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡ˜Ρƒ Π΅Π½Ρ‚ΠΈΡ‚Π΅Ρ‚Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅, Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½Π΅ Π·Π°Ρ…Ρ‚Π΅Π²Π΅ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π΅), Π³Π΄Π΅ сС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π²Π΅Π·Π΅ ΠΈΠ· ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ ΠΏΡ€ΠΈΡ…Π²Π°Ρ‚Π° ΠΊΠ°ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚:

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ АпплицатионЦонтСкт:

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

Ако Π˜Π” Π²Π΅Π·Π΅ нијС Π½Π°Π²Π΅Π΄Π΅Π½, Ρ‚Π°Π΄Π° Ρ›Π΅ сС користити Π²Π΅Π·Π° ΠΏΠΎΠ΄ Π½Π°Π·ΠΈΠ²ΠΎΠΌ β€žΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π½Π°β€œ.

Π”ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΌΠ°ΠΏΠΈΡ€Π°ΡšΠ΅ Π΅Π½Ρ‚ΠΈΡ‚Π΅Ρ‚Π° Ρƒ Ρ‚Π°Π±Π΅Π»Π΅ Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ° јС ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΎ ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ΅ΠΌ стандардних НΠ₯ΠΈΠ±Π΅Ρ€Π½Π°Ρ‚Π΅ Π°Π»Π°Ρ‚Π°. ΠœΠΎΠΆΠ΅Ρ‚Π΅ користити опис ΠΈ ΠΊΡ€ΠΎΠ· ΠΊΠΌΠ» Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ ΠΈ ΠΊΡ€ΠΎΠ· класС. Π—Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½ΠΎ писањС стуб Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌΠ° Ρƒ β€‹β€‹Ρ˜Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΈΠΌ тСстовима, ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ViennaNET.TestUtils.Orm.

ΠŸΡƒΠ½ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ° ВиСннаНЕВ.ΠžΡ€ΠΌ.* сС ΠΌΠΎΠ³Ρƒ Π½Π°Ρ›ΠΈ ΠΎΠ²Π΄Π΅.

ВиСннаНЕВ.МСссагинг.*

Π‘ΠΊΡƒΠΏ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° Ρ€Π°Π΄ са Ρ€Π΅Π΄ΠΎΠ²ΠΈΠΌΠ°.

Π—Π° Ρ€Π°Π΄ са Ρ€Π΅Π΄ΠΎΠ²ΠΈΠΌΠ° ΠΈΠ·Π°Π±Ρ€Π°Π½ јС исти приступ ΠΊΠ°ΠΎ ΠΈ ΠΊΠΎΠ΄ Ρ€Π°Π·Π½ΠΈΡ… Π”Π‘ΠœΠ‘-Π°, односно максимално ΠΌΠΎΠ³ΡƒΡ›ΠΈ објСдињСни приступ Ρƒ ΠΏΠΎΠ³Π»Π΅Π΄Ρƒ Ρ€Π°Π΄Π° са Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΌ, Π±Π΅Π· ΠΎΠ±Π·ΠΈΡ€Π° Π½Π° ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅Π½ΠΈ ΠΌΠ΅Π½Π°ΡŸΠ΅Ρ€ Ρ€Π΅Π΄ΠΎΠ²Π°. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ViennaNET.Messaging јС ΡƒΠΏΡ€Π°Π²ΠΎ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Π°Π½ Π·Π° ΠΎΠ²ΠΎ ΡƒΡ˜Π΅Π΄ΠΈΡšΠ΅ΡšΠ΅, ΠΈ ViennaNET.Messaging.MQSeriesQueue, ViennaNET.Messaging.RabbitMQQueue ΠΈ ViennaNET.Messaging.KafkaQueue садрТС ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π° Π·Π° Π˜Π‘Πœ МК, Π Π°Π±Π±ΠΈΡ‚ΠœΠš ΠΈ ΠšΠ°Ρ„ΠΊΠ°, рСспСктивно.

Када Ρ€Π°Π΄ΠΈΡ‚Π΅ са Ρ€Π΅Π΄ΠΎΠ²ΠΈΠΌΠ°, ΠΏΠΎΡΡ‚ΠΎΡ˜Π΅ Π΄Π²Π° процСса: ΠΏΡ€ΠΈΠΌΠ°ΡšΠ΅ ΠΏΠΎΡ€ΡƒΠΊΠ΅ ΠΈ њСно слањС.

РазмислитС ΠΎ ΠΏΡ€ΠΈΠΌΠ°ΡšΡƒ. ОвдС ΠΏΠΎΡΡ‚ΠΎΡ˜Π΅ 2 ΠΎΠΏΡ†ΠΈΡ˜Π΅: Π·Π° Π½Π΅ΠΏΡ€Π΅ΠΊΠΈΠ΄Π½ΠΎ ΡΠ»ΡƒΡˆΠ°ΡšΠ΅ ΠΈ Π·Π° ΠΏΡ€ΠΈΠΌΠ°ΡšΠ΅ јСднС ΠΏΠΎΡ€ΡƒΠΊΠ΅. Π”Π° бистС стално ΡΠ»ΡƒΡˆΠ°Π»ΠΈ Ρ€Π΅Π΄, ΠΏΡ€Π²ΠΎ ΠΌΠΎΡ€Π°Ρ‚Π΅ описати класу процСсора ΠΎΠ΄ којС јС наслСђСна IMessageProcessor, који Ρ›Π΅ Π±ΠΈΡ‚ΠΈ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Π°Π½ Π·Π° ΠΎΠ±Ρ€Π°Π΄Ρƒ Π΄ΠΎΠ»Π°Π·Π½Π΅ ΠΏΠΎΡ€ΡƒΠΊΠ΅. Π—Π°Ρ‚ΠΈΠΌ, ΠΌΠΎΡ€Π° Π±ΠΈΡ‚ΠΈ "ΠΏΠΎΠ²Π΅Π·Π°Π½" са ΠΎΠ΄Ρ€Π΅Ρ’Π΅Π½ΠΈΠΌ Ρ€Π΅Π΄ΠΎΠΌ; Ρ‚ΠΎ сС Ρ€Π°Π΄ΠΈ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡ˜ΠΎΠΌ Ρƒ IQueueReactorFactory ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°Ρ˜ΡƒΡ›ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ€Π΅Π΄Π° ΠΈΠ· ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅:

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΡ‡Π΅Ρ‚ΠΊΠ° ΡΠ»ΡƒΡˆΠ°ΡšΠ°:

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

Π—Π°Ρ‚ΠΈΠΌ, ΠΊΠ°Π΄Π° сС сСрвис ΠΏΠΎΠΊΡ€Π΅Π½Π΅ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° сС ΠΏΠΎΠ·ΠΎΠ²Π΅ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ ΡΠ»ΡƒΡˆΠ°ΡšΠ΅, свС ΠΏΠΎΡ€ΡƒΠΊΠ΅ ΠΈΠ· Π½Π°Π²Π΅Π΄Π΅Π½ΠΎΠ³ Ρ€Π΅Π΄Π° Ρ›Π΅ ΠΈΡ›ΠΈ Ρƒ ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π°Ρ˜ΡƒΡ›ΠΈ процСсор.

Π”Π° бистС ΠΏΡ€ΠΈΠΌΠΈΠ»ΠΈ Ρ˜Π΅Π΄Π½Ρƒ ΠΏΠΎΡ€ΡƒΠΊΡƒ Ρƒ Ρ„Π°Π±Ρ€ΠΈΡ‡ΠΊΠΎΠΌ ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜ΡΡƒ IMessagingComponentFactory ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ CreateMessageReceiverкоји Ρ›Π΅ ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚ΠΈ ΠΏΡ€ΠΈΠΌΠ°ΠΎΡ†Π° који Ρ‡Π΅ΠΊΠ° ΠΏΠΎΡ€ΡƒΠΊΡƒ ΠΈΠ· Ρ€Π΅Π΄Π° који ΠΌΡƒ јС Π½Π°Π²Π΅Π΄Π΅Π½:

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

Π”Π° ΠΏΠΎΡˆΠ°Ρ™Π΅Ρ‚Π΅ ΠΏΠΎΡ€ΡƒΠΊΡƒ ΠΌΠΎΡ€Π°Ρ‚Π΅ користити исто IMessagingComponentFactory ΠΈ ΠΊΡ€Π΅ΠΈΡ€Π°Ρ˜Ρ‚Π΅ ΠΏΠΎΡˆΠΈΡ™Π°ΠΎΡ†Π° ΠΏΠΎΡ€ΡƒΠΊΠ΅:

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

ΠŸΠΎΡΡ‚ΠΎΡ˜Π΅ Ρ‚Ρ€ΠΈ Π³ΠΎΡ‚ΠΎΠ²Π΅ ΠΎΠΏΡ†ΠΈΡ˜Π΅ Π·Π° ΡΠ΅Ρ€ΠΈΡ˜Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ˜Ρƒ ΠΈ Π΄Π΅ΡΠ΅Ρ€ΠΈΡ˜Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ˜Ρƒ ΠΏΠΎΡ€ΡƒΠΊΠ΅: само тСкст, ΠšΠ‘ΠœΠ› ΠΈ ЈБОН, Π°Π»ΠΈ Π°ΠΊΠΎ јС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»Π°ΠΊΠΎ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ сопствСнС ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜ΡΠ° IMessageSerializer ΠΈ IMessageDeserializer.

Π’Ρ€ΡƒΠ΄ΠΈΠ»ΠΈ смо сС Π΄Π° сачувамо Ρ˜Π΅Π΄ΠΈΠ½ΡΡ‚Π²Π΅Π½Π΅ могућности сваког ΠΌΠ΅Π½Π°ΡŸΠ΅Ρ€Π° Ρ€Π΅Π΄ΠΎΠ²Π°, Π½ΠΏΡ€. ViennaNET.Messaging.MQSeriesQueue ΠΎΠΌΠΎΠ³ΡƒΡ›Π°Π²Π° Π²Π°ΠΌ Π΄Π° ΡˆΠ°Ρ™Π΅Ρ‚Π΅ Π½Π΅ само тСкстуалнС, Π²Π΅Ρ› ΠΈ Π±Π°Ρ˜Ρ‚ ΠΏΠΎΡ€ΡƒΠΊΠ΅, ΠΈ ViennaNET.Messaging.RabbitMQQueue ΠΏΠΎΠ΄Ρ€ΠΆΠ°Π²Π° Ρ€ΡƒΡ‚ΠΈΡ€Π°ΡšΠ΅ ΠΈ Ρ‡Π΅ΠΊΠ°ΡšΠ΅ Ρƒ ΠΏΠΎΠΊΡ€Π΅Ρ‚Ρƒ. Наш ΠΎΠΌΠΎΡ‚Π°Ρ‡ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π° Π·Π° Π Π°Π±Π±ΠΈΡ‚ΠœΠš Ρ‚Π°ΠΊΠΎΡ’Π΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π° Π½Π΅ΠΊΠΈ ΠΏΡ€ΠΈΠ²ΠΈΠ΄ РПЦ-Π°: ΡˆΠ°Ρ™Π΅ΠΌΠΎ ΠΏΠΎΡ€ΡƒΠΊΡƒ ΠΈ Ρ‡Π΅ΠΊΠ°ΠΌΠΎ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€ ΠΈΠ· посСбног ΠΏΡ€ΠΈΠ²Ρ€Π΅ΠΌΠ΅Π½ΠΎΠ³ Ρ€Π΅Π΄Π°, који сС ΠΊΡ€Π΅ΠΈΡ€Π° само Π·Π° Ρ˜Π΅Π΄Π½Ρƒ ΠΏΠΎΡ€ΡƒΠΊΡƒ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Π°.

ovde јС ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ° Ρ€Π΅Π΄ΠΎΠ²Π° са основним нијансама повСзивања.

ВиСннаНЕВ.Π¦Π°Π»Π»Π¦ΠΎΠ½Ρ‚Π΅ΠΊΡ‚

Π Π΅Π΄ΠΎΠ²Π΅ користимо Π½Π΅ само Π·Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ˜Ρƒ ΠΈΠ·ΠΌΠ΅Ρ’Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΠΈΡ… систСма, Π²Π΅Ρ› ΠΈ Π·Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ ΠΈΠ·ΠΌΠ΅Ρ’Ρƒ микросСрвиса истС Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρƒ ΠΎΠΊΠ²ΠΈΡ€Ρƒ сагС. Ово јС Π΄ΠΎΠ²Π΅Π»ΠΎ Π΄ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±Π΅ Π΄Π° сС зајСдно са ΠΏΠΎΡ€ΡƒΠΊΠΎΠΌ прСнСсу ΠΈ ΠΏΠΎΠΌΠΎΡ›Π½ΠΈ ΠΏΠΎΠ΄Π°Ρ†ΠΈ ΠΊΠ°ΠΎ ΡˆΡ‚ΠΎ су ΠΏΡ€ΠΈΡ˜Π°Π²Π° корисника, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π·Π°Ρ…Ρ‚Π΅Π²Π° Π·Π° Π΅Π²ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ€Π°ΡšΠ΅ ΠΎΠ΄ ΠΊΡ€Π°Ρ˜Π° Π΄ΠΎ ΠΊΡ€Π°Ρ˜Π°, ΠΈΠ·Π²ΠΎΡ€Π½Π° ИП адрСса ΠΈ ΠΏΠΎΠ΄Π°Ρ†ΠΈ ΠΎ Π°ΡƒΡ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡ˜ΠΈ. Π”Π° бисмо спровСли ΠΏΡ€ΠΎΡΠ»Π΅Ρ’ΠΈΠ²Π°ΡšΠ΅ ΠΎΠ²ΠΈΡ… ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ°, Ρ€Π°Π·Π²ΠΈΠ»ΠΈ смо Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ViennaNET.CallContext, који Π²Π°ΠΌ ΠΎΠΌΠΎΠ³ΡƒΡ›Π°Π²Π° Π΄Π° сачуватС ΠΏΠΎΠ΄Π°Ρ‚ΠΊΠ΅ ΠΈΠ· Π·Π°Ρ…Ρ‚Π΅Π²Π° који ΡƒΠ»Π°Π·ΠΈ Ρƒ услугу. Π£ ΠΎΠ²ΠΎΠΌ ΡΠ»ΡƒΡ‡Π°Ρ˜Ρƒ, Π½Π°Ρ‡ΠΈΠ½ Π½Π° који јС Π·Π°Ρ…Ρ‚Π΅Π² Π½Π°ΠΏΡ€Π°Π²Ρ™Π΅Π½, ΠΏΡ€Π΅ΠΊΠΎ Ρ€Π΅Π΄Π° ΠΈΠ»ΠΈ ΠΏΡ€Π΅ΠΊΠΎ Π₯Ρ‚Ρ‚ΠΏ-Π°, нијС Π±ΠΈΡ‚Π°Π½. Π—Π°Ρ‚ΠΈΠΌ, ΠΏΡ€Π΅ слања ΠΎΠ΄Π»Π°Π·Π½ΠΎΠ³ Π·Π°Ρ…Ρ‚Π΅Π²Π° ΠΈΠ»ΠΈ ΠΏΠΎΡ€ΡƒΠΊΠ΅, ΠΏΠΎΠ΄Π°Ρ†ΠΈ сС ΡƒΠ·ΠΈΠΌΠ°Ρ˜Ρƒ ΠΈΠ· контСкста ΠΈ ΡΡ‚Π°Π²Ρ™Π°Ρ˜Ρƒ Ρƒ Π·Π°Π³Π»Π°Π²Ρ™Π°. Π”Π°ΠΊΠ»Π΅, слСдСћи сСрвис ΠΏΡ€ΠΈΠΌΠ° ΠΏΠΎΠΌΠΎΡ›Π½Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΊΠ΅ ΠΈ њимС ΡƒΠΏΡ€Π°Π²Ρ™Π° Π½Π° исти Π½Π°Ρ‡ΠΈΠ½.

Π₯Π²Π°Π»Π° Π²Π°ΠΌ Π½Π° паТњи, Ρ€Π°Π΄ΡƒΡ˜Π΅ΠΌΠΎ сС вашим ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΌΠ° ΠΈ Π·Π°Ρ…Ρ‚Π΅Π²ΠΈΠΌΠ° Π·Π° ΠΏΠΎΠ²Π»Π°Ρ‡Π΅ΡšΠ΅!

Π˜Π·Π²ΠΎΡ€: Π²Π²Π².Ρ…Π°Π±Ρ€.Ρ†ΠΎΠΌ

Π”ΠΎΠ΄Π°Ρ˜ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€