Code Monkey home page Code Monkey logo

wolverine's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wolverine's Issues

Saga improvements

See SagaFramePolicy. Use a custom exception with more context. Similar validation to what we did for projections in Marten

Metrics collection

Way more analysis necessary. At first thought, collect:

  • Standing count of outgoing messages in inbox/outbox -- observable gauge
  • Count of queue depth. Sampled observable gauge
  • Aggregate "effective time" from sent to successfully processed. Histogram?
  • Aggregate average of sent messages -- counter
  • Number of messages handled by endpoint. Success & failure. Retries? -- counter with tags
  • Queue length -- observable gauge

Default Endpoint Names

For Rabbit MQ queues, it should be the queue name. Or exchange name
For SQS, the queue name
and so on

This will help a bit w/ diagnostics and logging

Endpoint Configuration Policies

Need the ability to specify properties of various endpoints more easily

Tasks

  • Rabbit MQ conventional routing needs an allow/deny list filter. Chain configuration for listener/sender using expression somehow
  • Policies.UseDurableInboxForAllListeners()
  • Policies.UseDurableOutboxForAllSenders()
  • chain configuration for Rabbit MQ listeners
  • chain configuration for Rabbit MQ senders
  • Policies.LocalQueues(configure)
  • Policies.UseSeparateLocalQueueForEachMessageType(configure)
  • New way of registering endpoint policies

Improve the quick start sample

cc @AlexZeitler

  • Improve the description of cascading messages. Do something w/ ItemCreated
  • Link to the handler discovery, but add more description
  • Probably more, so just review. That was written years ago.

Delete Endpoint.Parse(uri)

It was a hokey way of making it easy to load all settings from configuration by using Uri, but that just doesn't really fly now.

Reconsider this.

Rework ITrackedSession usage

  • Evaluate usage
  • When asking for the "single XYZ of anything", and there's more than one or none, throw a better exception with the full history

Clean up IEnvelopePersistence API

Make it much more clear which methods require an active session. Maybe split incoming vs outgoing persistence? Use IReadOnlyList everywhere. Maybe bring in CancellationToken? Deal with any TODO in the code too.

Reevaluate CircuitWatcher

What do do when the sender is latched and it's not durable? Throw at the point of sending? Move the Envelope.QuickSendAsync() logic into ISendingAgent? The variability is there.

Advanced Pulsar Usage

Really just making sure that ConsumerOptions and ProducerOptions are both exposed and usable from PulsarEndpoint. Might try to make the subscription name be configurable too, but use the service name as the default.

AWS SQS & SNS Support

Not sure if that'll require a separate library or not yet. Hoping that LocalStack is viable

Re-evaluate in memory job scheduling

There's a unique InMemoryScheduledJobProcessor for each lightweight, local queue + the JasperRuntime. The diagnostics are useless.

Might be worth just improving the diagnostics on IJasperRuntime to show you everything that's outstanding.

Improved Middleware Strategy

The big goal is to make the creation and usage of middleware easier.

Test cases

  • Instance methods on middleware is scoped
  • Static methods
  • Synchronous "before"
  • Asynchronous "before"
  • Synchronous "after"
  • Asynchronous "after"
  • No filter
  • User-defined filter
  • Inferred filter by message applicability
  • Use multiple middleware on one handler
  • Add middleware by attribute too!
  • Can use services
  • Use objects built by middleware
  • Dispose middleware objects that are created
  • Filter model?

Acknowledgement workflow with callbacks

Need more context here. This is going to be used to standardize the workflow we built as custom code for a client to do acknowledgements about success or failure of an outgoing message, but with some mechanism to pass back contextual information about the original message.

New Wolverine ASP.Net Core Endpoint Model because why not?

To be clear, this will not be any kind of full blown, alternative AspNetCore framework because that way lies madness, heartbreak, and failure

Goal: Mechanism to utilize Jasper's execution pipeline within Minimal API HTTP endpoints without having to manually delegate through to ICommandBus.

Signature

Use the Endpoint suffix nomenclature for discovery. Either use fubu-style naming conventions on the method names, or
override with [HttpPost("route")] style attributes. So:

public class SomethingEndpoint
{
    public Task<Output> post_something(Input request, Service service, Service2 service2)
    {

    }

    // OR

    [HttpPost("/something")]
    public Task<Output> Post(Input request, Service service, Service2 service2)
    {

    }
}

Notes:

  • Still support method injection
  • The base class generated around this will handle registration with Minimal API? Or one generated class to make it all faster.
  • Gotta figure out how to expose metadata about the endpoints through to AspNetCore. Stuff like Open API configuration
    or [Authorize] attributes
  • How to designate outgoing messages versus the HTTP response??? Could there be a base class just to add outgoing messages
    ala Saga.MarkCompleted()?
  • Start making some of the other middleware HTTP aware? Thinking about making Marten being able to move the correlation id
    from the HTTP request to the session. Also ability to move the correlation id from HttpContext to the Jasper IExecutionContext?
    maybe that gets done with OTEL machinery???
  • Do the code generation well, and this could be a good Azure Functions / AWS Lambda serverless strategy by cutting out a lot of cold start issues
  • Support it on Saga as well? Why not?
  • Also want a more efficient way to delegate through to ICommandBus. Something where you get an IInvoker<T> or IQuery<TRequest, TResponse> behind the scenes?

Special Services

These services should be resolved to the main Jasper method automatically:

  1. HttpContext
  2. ClaimsPrincipal
  3. HttpRequest
  4. HttpResponse
  5. CancellationToken -- but this should come from the HTTP request

Publish event messages for meaningful actions in Wolverine

Publishing messages will allow users to easily register handlers for big events. Thinking:

  • circuit tripped off
  • circuit resumed
  • endpoint paused
  • endpoint restarted
  • endpoint failed?
  • endpoint too deep?

All of these are available for the tracker too? The observable path is beneficial too maybe.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.