Edition 0 Updated to asp. Net core 0


Implementing atomicity when publishing integration events through the event



Yüklə 11,82 Mb.
Pdf görüntüsü
səhifə132/288
tarix12.07.2023
ölçüsü11,82 Mb.
#136458
1   ...   128   129   130   131   132   133   134   135   ...   288
Implementing atomicity when publishing integration events through the event 
bus 
The following code shows how you can create a single transaction involving multiple DbContext 
objects

one context related to the original data being updated, and the second context related to 
the IntegrationEventLog table. 
The transaction in the example code below will not be resilient if connections to the database have 
any issue at the time when the code is running. This can happen in cloud-based systems like Azure 
SQL DB, which might move databases across servers. For implementing resilient transactions across 
multiple contexts, see the 
Implementing resilient Entity Framework Core SQL connections
 section later 
in this guide. 
For clarity, the following example shows the whole process in a single piece of code. However, the 
eShopOnContainers implementation is refactored and splits this logic into multiple classes so it’s 
easier to maintain. 
// Update Product from the Catalog microservice
//
public
async Task 
UpdateProduct
([FromBody]CatalogItem productToUpdate) 

var
catalogItem = 
await _catalogContext.
CatalogItems
.
SingleOrDefaultAsync
(i => i.
Id
== 


147 
CHAPTER 5 | Designing and Developing Multi-Container and Microservice-Based .NET Applications 
productToUpdate.
Id
); 
if
(catalogItem == 
null

return
NotFound
(); 
bool
raiseProductPriceChangedEvent = 
false

IntegrationEvent priceChangedEvent = 
null

if
(catalogItem.
Price
!= productToUpdate.
Price

raiseProductPriceChangedEvent = 

Yüklə 11,82 Mb.

Dostları ilə paylaş:
1   ...   128   129   130   131   132   133   134   135   ...   288




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin