Reliable integrations with NServiceBus
-
Upload
andreasohlund -
Category
Technology
-
view
2.689 -
download
0
Transcript of Reliable integrations with NServiceBus
![Page 1: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/1.jpg)
Reliable integrationswith NServiceBus
Andreas ÖhlundEnterprise Development Expert
![Page 2: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/2.jpg)
Agenda
• War story
• Dragons and how to manage them
• A “saga” with a happy ending
• Q & A
![Page 3: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/3.jpg)
![Page 4: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/4.jpg)
![Page 5: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/5.jpg)
![Page 6: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/6.jpg)
![Page 7: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/7.jpg)
![Page 8: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/8.jpg)
![Page 9: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/9.jpg)
Fact:A trip to dragon territory cantake a while...
![Page 10: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/10.jpg)
The usual waypublic void Handle(OrderPlaced message){
var order = new Order{ Id = message.OrderID };
order.TrackingCode = fedex.BookPickup(order); order.Status = ShippingStatus.PickupBooked;
repository.Save(order);}
![Page 11: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/11.jpg)
The usual waypublic void Handle(OrderPlaced message){
var order = new Order{ Id = message.OrderID };
order.TrackingCode = fedex.BookPickup(order); order.Status = ShippingStatus.PickupBooked;
repository.Save(order);}
2:
3:
![Page 12: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/12.jpg)
The usual waypublic void Handle(OrderPlaced message){
var order = new Order{ Id = message.OrderID };
order.TrackingCode = fedex.BookPickup(order); order.Status = ShippingStatus.PickupBooked;
repository.Save(order);}
This might take a while!2:
3:
![Page 13: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/13.jpg)
Fact:Dragons doesn’t support transactions.
![Page 14: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/14.jpg)
TX
Database rollback
DB
Order
Store
Ship
![Page 15: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/15.jpg)
TX
Database rollback
DB
Order
Store
Ship
![Page 16: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/16.jpg)
TX
Database rollback
DB
Order
Store
Ship
![Page 17: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/17.jpg)
No TXSupport
TX
Database rollback
DB
Order
Store
Ship
![Page 18: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/18.jpg)
No TXSupport
TX
Database rollback
DB
Order
Store
Ship
Did we just loose an order?
![Page 19: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/19.jpg)
No TXSupport
TX
Database rollback
DB
Order
Store
Ship
![Page 20: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/20.jpg)
No TXSupport
TX
Database rollback
DB
Order
Store
Ship
Order Http
![Page 21: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/21.jpg)
Design guideline
“Interact with non transactional resources using separate endpoints”
![Page 22: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/22.jpg)
R# Extract endpoint public void Handle(OrderPlaced message){ repository.Save(new Order { Id = message.OrderID, Status = ShippingStatus.AwaitingShipment });
bus.Send<BookShipment>(m => { m.OrderID = message.OrderID; });}
![Page 23: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/23.jpg)
R# Extract endpoint public void Handle(OrderPlaced message){ repository.Save(new Order { Id = message.OrderID, Status = ShippingStatus.AwaitingShipment });
bus.Send<BookShipment>(m => { m.OrderID = message.OrderID; });}
![Page 24: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/24.jpg)
R# Extract endpoint public void Handle(OrderPlaced message){ repository.Save(new Order { Id = message.OrderID, Status = ShippingStatus.AwaitingShipment });
bus.Send<BookShipment>(m => { m.OrderID = message.OrderID; });}
![Page 25: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/25.jpg)
R# Extract endpoint
public void Handle(ShipmentBooked message){
var order = repository.Get<Order>(message.OrderID);
order.TrackingCode = message.TrackingCode;
repository.Save(order);}
![Page 26: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/26.jpg)
TX
Consistency across rollbacks
Order
![Page 27: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/27.jpg)
TX
Consistency across rollbacks
Order
DBStore
![Page 28: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/28.jpg)
TX
Consistency across rollbacks
Order
DBStore
Book shipment MQ
![Page 29: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/29.jpg)
TX
Consistency across rollbacks
Order
DBStore
Book shipment MQ
![Page 30: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/30.jpg)
TX
Consistency across rollbacks
Order
DBStore
Book shipment MQ
![Page 31: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/31.jpg)
TX
Consistency across rollbacks
Order
DBStore
Book shipment MQ
![Page 32: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/32.jpg)
Not all return from a trip to the dragons
Fact:Not everyone will make it back.
![Page 33: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/33.jpg)
TX
What happens if the response is lost?
BookShipment
Fedex.Ship
![Page 34: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/34.jpg)
TX
What happens if the response is lost?
BookShipment
Fedex.Ship
TimeoutException
![Page 35: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/35.jpg)
TX
What happens if the response is lost?
BookShipment
Fedex.Ship
TimeoutException
![Page 36: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/36.jpg)
Commit
TX
What happens if the response is lost?
BookShipment
Fedex.Ship
TimeoutException
![Page 37: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/37.jpg)
IntegrationEndpoint
IdempotencyBookShipment
![Page 38: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/38.jpg)
IntegrationEndpoint
IdempotencyBookShipment
http://fedex.com/ship ?id=xyz123
![Page 39: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/39.jpg)
Commit
IntegrationEndpoint
IdempotencyBookShipment
http://fedex.com/ship ?id=xyz123
![Page 40: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/40.jpg)
Commit
IntegrationEndpoint
IdempotencyBookShipment
http://fedex.com/ship ?id=xyz123
TimeoutExceptionX
![Page 41: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/41.jpg)
Commit
IntegrationEndpoint
IdempotencyBookShipment
http://fedex.com/ship ?id=xyz123
http://fedex.com/ship?id=xyz123
TimeoutExceptionX
![Page 42: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/42.jpg)
Commit
IntegrationEndpoint
IdempotencyBookShipment
http://fedex.com/ship ?id=xyz123
Discard
http://fedex.com/ship?id=xyz123
TimeoutExceptionX
![Page 43: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/43.jpg)
Commit
IntegrationEndpoint
IdempotencyBookShipment
http://fedex.com/ship ?id=xyz123
Discard
http://fedex.com/ship?id=xyz123
TimeoutExceptionX
![Page 44: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/44.jpg)
Commit
IntegrationEndpoint
IdempotencyBookShipment
http://fedex.com/ship ?id=xyz123
Discard
http://fedex.com/ship?id=xyz123
TimeoutExceptionX
ShipmentBooked
![Page 45: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/45.jpg)
Fact:A trip to the dragons may be costly.
![Page 46: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/46.jpg)
Timeouts vNext
• Thread.Sleep is not a good solution
• Need a way to have durable timeouts
• The NServiceBus timeout manager solves this for us
![Page 47: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/47.jpg)
Fact:Dragons have home turf advantage.
![Page 48: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/48.jpg)
Scalable integrations
• Manage traffic peaks
• Allow you to control the pace
Use throttling to:
![Page 49: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/49.jpg)
A more scalable design
Client Server
![Page 50: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/50.jpg)
A more scalable design
Client Server
Request
![Page 51: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/51.jpg)
A more scalable design
Client Server
Request Send
![Page 52: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/52.jpg)
A more scalable design
Client Server
Request
Ticket - come back in Thttp://fedex.com/responses/xyz123
Send
![Page 53: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/53.jpg)
A more scalable design
Client Server
Request
Ticket - come back in Thttp://fedex.com/responses/xyz123
Send
CacheRecv
![Page 54: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/54.jpg)
A more scalable design
Client Server
Request
Ticket - come back in Thttp://fedex.com/responses/xyz123
} T
http://fedex.com/responses/xyz123
Send
CacheRecv
![Page 55: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/55.jpg)
A more scalable design
Client Server
Request
Ticket - come back in Thttp://fedex.com/responses/xyz123
} T
http://fedex.com/responses/xyz123
Response / come back in T2
Send
CacheRecv
![Page 56: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/56.jpg)
A more scalable design
Client Server
Request
Ticket - come back in Thttp://fedex.com/responses/xyz123
} T
http://fedex.com/responses/xyz123
Response / come back in T2
Send
CacheRecv
![Page 57: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/57.jpg)
A more scalable design
Client Server
Request
Ticket - come back in Thttp://fedex.com/responses/xyz123
} T
http://fedex.com/responses/xyz123
Response / come back in T2
Send
CacheRecv
![Page 58: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/58.jpg)
Using sagas to control message flow
BookShipment
IntegrationSaga
FedexEndpointTimeout
ManagerFedex
![Page 59: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/59.jpg)
Using sagas to control message flow
BookShipment
IntegrationSaga
FedexEndpointTimeout
Manager
Get ticket
Fedex
![Page 60: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/60.jpg)
Using sagas to control message flow
BookShipment
IntegrationSaga
FedexEndpointTimeout
Manager
Get ticket
Fedex
![Page 61: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/61.jpg)
Using sagas to control message flow
BookShipment
IntegrationSaga
FedexEndpointTimeout
Manager
Get ticket
Fedex
![Page 62: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/62.jpg)
Using sagas to control message flow
BookShipment
IntegrationSaga
FedexEndpointTimeout
Manager
Wake me up in T
Get ticket
Fedex
![Page 63: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/63.jpg)
Using sagas to control message flow
BookShipment
IntegrationSaga
FedexEndpointTimeout
Manager
Wake me up in T
Get ticket
Fedex
![Page 64: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/64.jpg)
Using sagas to control message flow
BookShipment
IntegrationSaga
FedexEndpointTimeout
Manager
Wake me up in T
Get ticket
Get Data
Fedex
![Page 65: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/65.jpg)
Using sagas to control message flow
BookShipment
IntegrationSaga
FedexEndpointTimeout
Manager
Wake me up in T
Get ticket
Get Data
Fedex
![Page 66: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/66.jpg)
Using sagas to control message flow
BookShipment
IntegrationSaga
FedexEndpointTimeout
Manager
Wake me up in T
Get ticket
Get Data
Fedex
![Page 67: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/67.jpg)
Code...
![Page 68: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/68.jpg)
![Page 69: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/69.jpg)
Thanks for listening!
![Page 70: Reliable integrations with NServiceBus](https://reader033.fdocuments.in/reader033/viewer/2022050613/54973893b479593a798b45ea/html5/thumbnails/70.jpg)
Thanks for listening!
Andreas ÖhlundEnterprise Development Expert