eshoponcontainers's People
Forkers
hathanhhung gamu9 propellingbits dmorosinotto koksen yogiraja slamj1 onlyforkbj ksigmund lathakan2103 nqtran2871 cesarcastrocuba lulzzz ddonahue 48355746 githileco iamsingularity voodoosv yzhoholiev ranganathsb tthtun jhonatantirado andreiivanou daudihusbands arnoldsiregar hoaxoan newcup leijiancd tygsachin dineshedlapalli rafaelfcarneiro slorinc1 ajaysharma201291 chaithu312 renliguo hangyejiadao1993 mrmakdev2014 noriffik alfonsovgs adeelrazzaq grigori-kureghyan paladanycluj rammybt jkeetman mib-dotnet igorsiq leo2020 mkejeiri cquirosj christtian-crispim pankajmeta hxaxa pbacevedo ljcorreia cyberkoolman awright18eshoponcontainers's Issues
Enable Performance Monitoring
Local development in Visual Studio is cumbersome
Regular iterative development of the project is cumbersome within Visual Studio. Connections often get lost to containers or Rabbit and intermittent errors arise sometimes requiring the project to be restarted or, in some cases, deleting the containers and recreating them.
Also, in a real life scenario, we would not likely develop a solution in this way. Docker is more or less a deployment concern so the solution should be developed locally as you normally would and the process of running in Docker would usually happen as a separate process.
I propose we create an .sln file geared to this way of working.
Create documentation
PoA
-
NServiceBus
- Routing configuration
- Add snippets from the solution to illustrate how it's configured
- Describe
- Routing configuration
-
Transport
- RabbitMQ
-
Persister
- Cover in memory persistence that we're currently using
- Cover SQL Persistence when it's added
- Explain how to configure/create dbs in Docker
- Explain that scripts are auto-executed, but can (should?) be disabled in production
-
SI
- Explain how to set it up
- Add screenshot with visualization
-
SP
- Explain how to set it up
- Add screenshot with visualization
-
Serialization
- Explain behavior to fallback on type of message, because contracts aren't shared.
- Explain this is a deployment issue and doesn't have to be 'decoupled' in VIsual Studio.
-
Outbox
- Catalog Service
- Removed EventLog and enabled NServiceBus Outbox
Especially checkOrderStatusChangedToAwaitingValidationIntegrationEventHandler
as it's extremely easier than before. -
IntegrationEventMigrations
removed.
- Removed EventLog and enabled NServiceBus Outbox
- Ordering Service
-
IntegrationEventMigrations
removed.
-
- Catalog Service
Migrate to Castle Windsor
Is there any advanced sample like this with Windsor IoC?
Or can please guide me what I need to migrate your sample to Windsor
Move from in memory persistence to SQL persistence
Plan of Attack
- Basket
- Catalog
- Location
- Marketing
- Ordering
- Payment
Replace grace period manager with a saga
- Store data on incoming
UserCheckoutAcceptedIntegrationEvent
and publish event to trigger saga - Add timeout in saga and upon receiving timeout, publish
GracePeriodConfirmedIntegrationEvent
- Receive
OrderStockRejectedIntegrationEventHandler
inside saga - Receive
CancelOrderCommand
inside saga - Process
OrderStockConfirmedIntegrationEvent
correctly. Not 100% sure on how this works - Check any other events that seem like infrastructural events, might need to replace these with business events. It's either cancelled or not.
Finally this should work
- Happy path where orders are simply successfully ordered
- Path where orders are canceled by user
- Path where orders are canceled because we're out of stock
- Path where payment isn't successful.
- Clean up
- Tests
Use IHostedService to start / stop the endpoint
Improve message-type sharing
Instead of copying the message classes between the various services, something similar can be achieved without creating a shared message assembly - use Linked Files to have a single copy of the message classes.
If this path is chosen, the Readme should also be updated.
Move to SQL Server 2017 GA container
- Use proper tag
2017-GA
- Use proper environment variable for password
MSSQL_SA_PASSWORD
Enable Auditing
Document the journey of an order
In preparation for sagas, @dvdstelt and I followed the path of an order. Given the complexity of the code, I thought I'd document it at least in an issue first and we can figure out if we want to do anything with it.
Much of this will change with the saga implementation for orders but here's what we have so far:
- User checks out an order. This triggers a
UserCheckoutAcceptedIntegrationEvent
UserCheckoutAcceptedIntegrationEventHandler
- publishes
OrderStartedIntegrationEvent
event, which empties the shoppingbasket inBasket
service. - creates and publishes a
CreateOrderCommand
Mediatr command
- publishes
CreateOrderCommandHandler
creates anOrder
and saves to the databaseGracePeriodManagerService
runs as anIHostedService
. Every 30 seconds (by default), it checks the database for submitted orders where the grace period (by default, 1 minute) has ended. For each order, it publishes aGracePeriodConfirmedIntegrationEvent
GracePeriodConfirmedIntegrationEventHandler
updates the order status to AwaitingValidation. Besides updating the orders status, this also adds anOrderStatusChangedToAwaitingValidationDomainEvent
to theOrder
aggregates internal list of domain eventsGracePeriodConfirmedIntegrationEventHandler
then saves the order to the database.- IMPORTANT: When saving the order,
OrderingContext
also dispatches any pending domain events
- IMPORTANT: When saving the order,
OrderStatusChangedToAwaitingValidationDomainEventHandler
kicks in, verifies stock, then publishesOrderStatusChangedToAwaitingValidationIntegrationEvent
OrderStatusChangedToAwaitingValidationIntegrationEventHandler
(in Catalog.API) checks stock and publishesOrderStockRejectedIntegrationEvent
orOrderStockConfirmedIntegrationEvent
accordingly
Stock rejected
OrderStockRejectedIntegrationEventHandler
collects rejected items, sets order status toCancelled
, and saves the order. No other work is performed
Stock confirmed
OrderStockConfirmedIntegrationEventHandler
sets the order status to "confirmed" which adds anOrderStatusChangedToStockConfirmedDomainEvent
to the order aggregate.OrderStockConfirmedIntegrationEventHandler
saves the order which triggers the domain event in the previous step in MediatrOrderStatusChangedToStockConfirmedDomainEventHandler
publishes anOrderStatusChangedToStockConfirmedIntegrationEvent
OrderStatusChangedToStockConfirmedIntegrationEventHandler
(in Payment.API) publishes eitherOrderPaymentSuccededIntegrationEvent
(sic) orOrderPaymentFailedIntegrationEvent
- `OrderPaymentFailedIntegrationEventHandler marks the order as cancelled and saves it
OrderPaymentSuccededIntegrationEventHandler
marks the order as paid, which adds anOrderStatusChangedToPaidDomainEvent
to the order aggregate. The handler then saves the order which triggers the domain event.OrderStatusChangedToPaidDomainEventHandler
triggers anOrderStatusChangedToPaidIntegrationEvent
OrderStatusChangedToPaidIntegrationEventHandler
(in Catalog.API) updates the stock
How behind is this from the main eShopOnContainers
Are there plans to consolidate all the changes done on the main eShoponContainers repo to this or maybe even consider opening a PR to move the NServiceBus implementation to the original repository?
Add SI visualization - doco + screenshots
Waiting for this #15.
PoA:
- Explain how to set up monitoring with SI/SC/SP
- Quick (one paragraph) intro to SI/SC/SP
- Capture screenshots and describe the visualizations from SI
- Capture screenshots and describe the visualizations from SP
- Add visualizations to the main Readme file with link to more detailed info above
Improvements to Readme
Some things I noticed that could be improved in the Readme include:
- Links to ServicePulse and ServiceInsight here: https://github.com/Particular/eShopOnContainers#monitoring-and-visualization-tools
- Link to documentation on unobtrusive mode
Remove all EventBus projects
Preserve conversation ID across all published events
Currently some events are published outside of the handler and conversation ID is not preserved.
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. ๐๐๐
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google โค๏ธ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.