Skip to content

Improved Inbox/Outbox/DLQ Storage Epic #1894

@jeremydmiller

Description

@jeremydmiller

Nobody get too excited here because a lot of this is driven by JasperFx client needs and this is related to some pending client engagements that have not been signed yet

Usability through Database Management

For RDBMS users -- which is most of our user base so far -- have an extensible storage that provides more usability through basic database management tools than is provided by the envelope serialization. So, for example, support:

  • Storing the tenant_id in a separate column -- this one is easy, and we might even be able to add this w/ opt in flags sooner rather than later
  • Tagging DLQ records by a group identifier like an event stream identity or saga id. That could use the Envelope.GroupId
  • Store the message body as JSON in a separate column so it's easily visible and maybe queryable -- this is way more usable if the system is only using JSON serialization
  • Possibly storing other header values and metadata in a JSON serialized dictionary similar to how we do it w/ Marten events

Command Line Tools

  • A new command line tool that can attempt to force Wolverine to process all inbox messages inline as a kind of "catch up now!" mode. Focus on messages w/ owner_id.
  • Same command line tool has an option to reassign/release all Incoming envelopes in the inbox
  • New command line to tool to force all outbox messages to be sent
  • Maybe an IHost helper extension to "push" all outbox messages in automated testing. Or something to "wait" for all messages to be sent. Tangentially related, it might be helpful to have a testing time override to force all sending endpoints to be Inline???? Maybe finally an outbox + inline option? A new DurableInline option??? Or really another flag on the durable option?

CritterWatch Integration

  • Ability to query the inbox/outbox in addition to what's already been built for the DLQ
  • Especially the ability to analyze the scheduled messages
  • Ability to "force" stuck inbox messages to be played "now Mister!" (https://www.youtube.com/watch?v=BMR8AnL3RXw)
  • Ability to "force" stuck outbox messages to be played "now Mister!"
  • Ability to delete or reschedule scheduled messages
  • Ability to play scheduled message right now

EF Core Backed Message Store

Just what it says, leverage EF Core for a message store and an equivalent DurabilityAgent. This is partially to get us more flexibility and write less code, but also to potentially extend Wolverine inbox/outbox support to other relational database engines. We'd need to see about how to utilize EF Core migrations a bit better within an IStatefulResource model.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestwontfixThis will not be worked on

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions