Marten 6 / JasperFx "Grand Unified Theory" #2163
Unanswered
jeremydmiller
asked this question in
Ideas
Replies: 1 comment
-
I'm going to start a new discussion on this and just link to this. |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Blame @oskardudycz for this, he set my head spinning with all this late last week.
Problems & Goals
requires using Jasper, which also forces users to choose Lamar as the IoC tool
To utilize the existing outbox mechanism in Jasper with Marten, we could either:
Marten.Outbox
add on or by Jasper itselfAt this moment, I think we've got a better shot at making the 2nd approach work sooner rather than later
Potential, Supported Tech Usage Stacks
I think these are the potential combinations of JasperFx and major tooling that other folks would try to use:
to publish events with a strict ordering guarantee
Library Naming Convention Rules (?)
Here's what I want to suggest for library naming conventions going forward.
BaselineTypeDiscovery
toJasperFx.TypeDiscovery
Jasper.RabbitMQ
orMarten.NodaTime
JasperFx -- Current Library Structure
This is our current library structure in JasperFx
Grand Unified Theory
BaselineTypeDiscovery
-->JasperFx.TypeDiscovery
in its own repositoryLamarCodeGeneration
-->JasperFx.CodeGeneration
it its own repository, along withLamarCompiler
-->JasperFx.RuntimeCompiler
Move some of the code generation and middleware related code from Jasper to JasperFx.CodeGeneration.
[Transactional]
would move over. Some code around theHandlerChain
model in Jasper could move over. If we did that, then we could eliminateJasper.Persistence.Marten
and actually have the Marten middleware inside of Marten itself.Eliminate
Jasper.Marten
??? If the rawIEnvelopeTransaction
goes to the new messaging primitive lib, and the codegen middleware to Marten itself,there's no need for this library
Rip the environment checks and new
IStatefulResource
model in Oakton to something small and common likeJasperFx.Resources
orJasperFx.Core
. Takea direct reference from both Marten & Jasper to add more environment checks. Maybe even Lamar itself, so Lamar container checks are all wired in -- I like this idea (Jeremy)
Could consider moving the remaining useful bits of
Baseline
toJasperFx.Common
. There's a lot of overlap betweenLamar
andBaseline
today. Think I'd vote to thin down Baseline even further if we did that. There's some things in Baseline that are now in the BCL that weren't 12-15 years ago when FubuCore/Baseline startedA new
Marten.Outbox
add on library would add support for the jasper messaging primitives and the durability agent that's today in Jasper. That gives you effective outbox support within MartenSaveChangesAsync()
calls. The abstractions inJasperFx.MessagingPrimitives
should be broad enough to allow for efficient usage of MassTransit or NServiceBus to be plugged in as the senders as well as raw adapters to the various messaging transports (Rabbit MQ, Kafka, etc.).Rip the
Envelope
, some of the core Jasper abstractions likeISender
andISendingAgent
, the durability agent, and maybe even some of the basic TPL Dataflow code into a new commonJasperFx.MessagingPrimitives
library that would be consumed by bothMarten.Outbox
(new Marten addon) andJasper
itself. This is going to take some serious refactoring in Jasper itself to thin down the "special" parts of theEnvelope
structure, but that's been halfway planned anywayJasper
gets a lot smaller, and mostly gets focused on command execution, the handler pipeline, open telemetry diagnostics. The current database persistence libraries probably end up in other placesRe-birth of Storyteller
Storyteller is dead in the water, but I still want to resurrect it some day, maybe under a different name (Bobcat? Wolverine?). If Storyteller
lives again with a new UI, I'd like to dogfood quite a bit of Jasper in it. An idea I've had for a bit was to rip the
Envelope
model and theTCP-based socket
WireProtocol
in Jasper to use in the Storyteller library for communication between the running Storyteller process and the newStoryteller UI. These changes outlined above would further that goal
Beta Was this translation helpful? Give feedback.
All reactions