-
Notifications
You must be signed in to change notification settings - Fork 16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
eqxFc: Location with Long Running Inventory #40
base: master
Are you sure you want to change the base?
Conversation
fe578fe
to
d1bd9da
Compare
7c606dd
to
5d69f03
Compare
32e2cdd
to
6b328de
Compare
b1913ed
to
2bb7ee3
Compare
acee782
to
e1e5aa6
Compare
4025bb0
to
65c0b3c
Compare
c68d2e6
to
8503ac5
Compare
b9f4d4b
to
1b20fef
Compare
@@ -9,6 +9,8 @@ These templates focus solely on Consistent Processing using Equinox Stores: | |||
- [`eqxweb`](equinox-web/README.md) - Boilerplate for an ASP .NET Core 2 Web App, with an associated storage-independent Domain project using [Equinox](https://github.com/jet/equinox). | |||
- [`eqxwebcs`](equinox-web-csharp/README.md) - Boilerplate for an ASP .NET Core 2 Web App, with an associated storage-independent Domain project using [Equinox](https://github.com/jet/equinox), _ported to C#_. | |||
- [`eqxtestbed`](equinox-testbed/README.md) - Host that allows running back-to-back benchmarks when prototyping models using [Equinox](https://github.com/jet/equinox), using different stores and/or store configuration parameters. | |||
<a name="eqxFc"></a> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this HTML anchor tag a side effect from an IDE or something?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nope, just so I can link to a section within the readme, i.e. github.com/jet/equinox#eqxfc - changelog.md uses it also to provide an alias thats better than default generated ones
The
eqxfc
template hosts aggregates based on some patterns relevant to Fulfilment Centers. The goal is more to illustrate techniques of unit, integration testing and decoupling than necessarily to represent the exact business logic one might need.This PR (originally developed in jet/equinox#181) illustrates an approach to deal with long-lived streams without having them actually be infinite, which involves:
LocationEpoch
that maintains a rolling balanceClosed
event, after which no writers are permitted to writeLocationSeries
aggregate which holds a pointer to verified active epoch (competing readers/writers read this optimistically on a cached basis; in the event that they're behind, they'll compete to log the successful commencement of a new epoch, which cannot happen before theCarriedForward
event for the successor epoch has been committed)Inventory.Transaction
aggregate that fulfills two purposesInventorySeries
b)InventoryEpoch
, which are used to (idempotently) record the conclusion of each transfer/adjustment on a global summary streamInventory.Process.Service
which is a Process Manager that orchestrates the work involved in the transactions7. a/equinox-shipping bears a more complete version than that which existed here; theWatchdog
service that listens for stalled transactions, using theInventory.Process.Service
to drive a given flow to a conclusion if it has been determined to be stalled (open for 10s but not completed)Drive
member will remain here as a placeholder, but there's plenty interesting stuff in here without throwing yet another concept into the mixSee #50 for a simplified edition which removes the
LocationSeries
andCarriedForward
concepts in order to make it easier to inspect the mechanism