Skip to content
This repository was archived by the owner on May 1, 2024. It is now read-only.

Transport Native Support #629

Closed
jeremydmiller opened this issue Jan 10, 2020 · 4 comments
Closed

Transport Native Support #629

jeremydmiller opened this issue Jan 10, 2020 · 4 comments

Comments

@jeremydmiller
Copy link
Member

Go over it all and see if it still makes sense.

@jeremydmiller jeremydmiller added this to the The big 1.0 milestone Jan 10, 2020
@jeremydmiller
Copy link
Member Author

It doesn't make sense. Use native dead letter queue functionality for both Rabbit MQ and Azure Service Bus.

Ugh, this might call into question the entire listener approach to use much more native transport functionality. Might mean that the IMessageCallback is transport specific

@jeremydmiller jeremydmiller changed the title Review the dead letter queue functionality Transport Native Support Mar 23, 2020
@jeremydmiller jeremydmiller modified the milestones: The big 1.0, 1.1 Mar 23, 2020
@JarrodJ83
Copy link
Collaborator

JarrodJ83 commented May 14, 2020

As we've discussed I second these changes. The transports have robust functionality built in to deal with ordered delivery of messages and retry/dead letter logic. In particular, when ordering is a requirement we need to make sure the message is handled by the routed handler before acknowledging the message and reading the next from the transport. Even if we could guarantee ordered processing of the internal incoming jasper queue I think that would fall apart in a load balanced situation where multiple instances were processing a single stream/topic.

I did some playing around with this. Similar to how we pushed some logic from the ISenders up into the ISendingAgents to simplify them we may be able to do the same with the IListeners. Possibly leveraging some c#8 goodness with IAsyncEnumerable to read messages and pass them back to the agent for processing. I can push the branch if you're interested.

@jeremydmiller
Copy link
Member Author

jeremydmiller commented Jun 3, 2020

Should have done this before, but here we are and we need this:

  • New IListener.StartInline(IHandlerPipeline pipeline) method, implement everywhere w/ NotSupportedException at first
  • New InlineSendingAgent implementation
  • Endpoint.Mode --> Inline/Async/DurableAsync. New extension points
  • Use the mode in listener construction
  • Add configuration option for inline to TopicRouterConfiguration
  • Add configuration option for inline to SubscriberConfiguration
  • Add configuration option for inline to ListenerConfiguration
  • Rename modes to BufferedInMemory, Durable, Inline
  • Config method for outgoing, durable should be renamed to PersistAndForward()
  • Config method for incoming, durable should be renamed to PersistedOnReceipt
  • Config method for "queued" (was lightweight) receiving and sending should be BufferedInMemory()

Rabbit MQ

  • per message IChannelCallback implementation
  • listener implements the new StartInline() method
  • compliance tests with the new inline mode
  • native dead letter queue option

Azure Service Bus

  • per message IChannelCallback implementation
  • listener implements the new StartInline() method
  • compliance tests with the new inline mode
  • Add Xml API comments throughout the configuration fluent interface
  • Update documentation

Pulsar

  • per message IChannelCallback implementation
  • listener implements the new StartInline() method
  • compliance tests with the new inline mode

Kafka

  • per message IChannelCallback implementation
  • listener implements the new StartInline() method
  • compliance tests with the new inline mode

@jeremydmiller jeremydmiller removed this from the 1.2 milestone Jul 7, 2021
@jeremydmiller
Copy link
Member Author

I'm declaring success here.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

2 participants