Skip to content

Adds azure service bus to mocha#9578

Open
PascalSenn wants to merge 17 commits intomainfrom
pse/adds-azure-serivce-ubs
Open

Adds azure service bus to mocha#9578
PascalSenn wants to merge 17 commits intomainfrom
pse/adds-azure-serivce-ubs

Conversation

@PascalSenn
Copy link
Copy Markdown
Member

  • adds service bus transport
  • cleanup

Summary of the changes (Less than 80 chars)

  • Detail 1
  • Detail 2

Closes #bugnumber (in this specific format)

Copilot AI review requested due to automatic review settings April 18, 2026 15:13
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds an Azure Service Bus transport implementation to Mocha, including topology provisioning, middleware integration, and a full integration-test suite plus an Aspire-based example app for local emulation.

Changes:

  • Introduces Mocha.Transport.AzureServiceBus transport with descriptors, topology model/provisioning, client manager, and receive/dispatch endpoints.
  • Adds Azure Service Bus integration tests covering publish/subscribe, send, request/reply, middleware ordering, error queues, batching, and concurrency.
  • Adds an Aspire example solution showing multi-service interaction via the Azure Service Bus emulator.

Reviewed changes

Copilot reviewed 123 out of 123 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
src/Mocha/test/Mocha.Transport.AzureServiceBus.Tests/Mocha.Transport.AzureServiceBus.Tests.csproj New test project for Azure Service Bus transport
src/Mocha/test/Mocha.Transport.AzureServiceBus.Tests/Helpers/TestBus.cs Test harness helpers to build/start/stop a bus
src/Mocha/test/Mocha.Transport.AzureServiceBus.Tests/Helpers/AzureServiceBusFixture.cs Squadron-based Service Bus fixture + per-test naming isolation
src/Mocha/test/Mocha.Transport.AzureServiceBus.Tests/Behaviors/TransportMiddlewareTests.cs Verifies transport-level middleware registration/order
src/Mocha/test/Mocha.Transport.AzureServiceBus.Tests/Behaviors/SendTests.cs Verifies point-to-point send routing and keyed handlers
src/Mocha/test/Mocha.Transport.AzureServiceBus.Tests/Behaviors/RequestReplyTests.cs Verifies request/reply semantics and correlation under concurrency
src/Mocha/test/Mocha.Transport.AzureServiceBus.Tests/Behaviors/PublishSubscribeTests.cs Verifies publish fan-out and rapid-fire delivery
src/Mocha/test/Mocha.Transport.AzureServiceBus.Tests/Behaviors/FaultHandlingTests.cs Verifies remote error propagation and handler isolation after faults
src/Mocha/test/Mocha.Transport.AzureServiceBus.Tests/Behaviors/ExplicitTopologyTests.cs Verifies explicit topology declarations + routing
src/Mocha/test/Mocha.Transport.AzureServiceBus.Tests/Behaviors/ErrorQueueTests.cs Verifies fault routing to error queue and fault headers/body preservation
src/Mocha/test/Mocha.Transport.AzureServiceBus.Tests/Behaviors/EndpointMiddlewareTests.cs Verifies endpoint-level middleware registration/order
src/Mocha/test/Mocha.Transport.AzureServiceBus.Tests/Behaviors/CustomHeaderTests.cs Verifies custom header propagation via application properties
src/Mocha/test/Mocha.Transport.AzureServiceBus.Tests/Behaviors/ConnectionRecoveryTests.cs Verifies behavior across transport teardown/restart
src/Mocha/test/Mocha.Transport.AzureServiceBus.Tests/Behaviors/ConcurrencyTests.cs Verifies endpoint concurrency limits and observed overlap
src/Mocha/test/Mocha.Transport.AzureServiceBus.Tests/Behaviors/ConcurrencyLimiterTests.cs Verifies global concurrency limiter integration
src/Mocha/test/Mocha.Transport.AzureServiceBus.Tests/Behaviors/BusDefaultsIntegrationTests.cs Verifies bus-level defaults propagation/override behavior
src/Mocha/test/Mocha.Transport.AzureServiceBus.Tests/Behaviors/BatchingTests.cs Verifies batch handler delivery by size/time and under concurrency
src/Mocha/src/Mocha/Assembly.cs Grants internals visibility for transport + tests
src/Mocha/src/Mocha.Transport.AzureServiceBus/Mocha.Transport.AzureServiceBus.csproj New transport project + Azure SDK dependencies
src/Mocha/src/Mocha.Transport.AzureServiceBus/Assembly.cs InternalsVisibleTo for the transport’s test project
src/Mocha/src/Mocha.Transport.AzureServiceBus/MessageBusBuilderExtensions.cs Public AddAzureServiceBus(...) registration extensions
src/Mocha/src/Mocha.Transport.AzureServiceBus/Connection/AzureServiceBusClientManager.cs Manages ServiceBusClient, sender cache, admin client
src/Mocha/src/Mocha.Transport.AzureServiceBus/Configurations/AzureServiceBusTransportConfiguration.cs Transport config: connection, retry, topology, defaults
src/Mocha/src/Mocha.Transport.AzureServiceBus/Configurations/AzureServiceBusReceiveEndpointConfiguration.cs Receive endpoint config: queue + prefetch
src/Mocha/src/Mocha.Transport.AzureServiceBus/Configurations/AzureServiceBusDispatchEndpointConfiguration.cs Dispatch endpoint config: queue vs topic destination
src/Mocha/src/Mocha.Transport.AzureServiceBus/Configurations/AzureServiceBusDefaultTopicOptions.cs Default topic provisioning options
src/Mocha/src/Mocha.Transport.AzureServiceBus/Configurations/AzureServiceBusDefaultQueueOptions.cs Default queue provisioning options
src/Mocha/src/Mocha.Transport.AzureServiceBus/Configurations/AzureServiceBusDefaultEndpointOptions.cs Default receive endpoint options (prefetch/concurrency)
src/Mocha/src/Mocha.Transport.AzureServiceBus/Configurations/AzureServiceBusBusDefaults.cs Aggregates bus-level defaults for queue/topic/endpoint
src/Mocha/src/Mocha.Transport.AzureServiceBus/Descriptors/IAzureServiceBusMessagingTransportDescriptor.cs Fluent API for transport configuration
src/Mocha/src/Mocha.Transport.AzureServiceBus/Descriptors/IAzureServiceBusReceiveEndpointDescriptor.cs Fluent API for receive endpoint config
src/Mocha/src/Mocha.Transport.AzureServiceBus/Descriptors/IAzureServiceBusDispatchEndpointDescriptor.cs Fluent API for dispatch endpoint config
src/Mocha/src/Mocha.Transport.AzureServiceBus/Descriptors/AzureServiceBusMessagingTransportDescriptor.cs Collects declarations and builds transport configuration
src/Mocha/src/Mocha.Transport.AzureServiceBus/Descriptors/AzureServiceBusReceiveEndpointDescriptor.cs Receive endpoint descriptor implementation
src/Mocha/src/Mocha.Transport.AzureServiceBus/Descriptors/AzureServiceBusDispatchEndpointDescriptor.cs Dispatch endpoint descriptor implementation
src/Mocha/src/Mocha.Transport.AzureServiceBus/Topology/IAzureServiceBusResource.cs Abstraction for provisionable ASB resources
src/Mocha/src/Mocha.Transport.AzureServiceBus/Topology/Extensions/AzureServiceBusTransportDescriptorExtensions.cs Registers default conventions + middleware for ASB transport
src/Mocha/src/Mocha.Transport.AzureServiceBus/Topology/Descriptors/IAzureServiceBusTopicDescriptor.cs Fluent API for topic declarations
src/Mocha/src/Mocha.Transport.AzureServiceBus/Topology/Descriptors/IAzureServiceBusQueueDescriptor.cs Fluent API for queue declarations
src/Mocha/src/Mocha.Transport.AzureServiceBus/Topology/Descriptors/IAzureServiceBusSubscriptionDescriptor.cs Fluent API for subscription declarations
src/Mocha/src/Mocha.Transport.AzureServiceBus/Topology/Descriptors/AzureServiceBusTopicDescriptor.cs Topic descriptor implementation
src/Mocha/src/Mocha.Transport.AzureServiceBus/Topology/Descriptors/AzureServiceBusQueueDescriptor.cs Queue descriptor implementation
src/Mocha/src/Mocha.Transport.AzureServiceBus/Topology/Descriptors/AzureServiceBusSubscriptionDescriptor.cs Subscription descriptor implementation
src/Mocha/src/Mocha.Transport.AzureServiceBus/Topology/Configurations/AzureServiceBusTopicConfiguration.cs Topic topology configuration model
src/Mocha/src/Mocha.Transport.AzureServiceBus/Topology/Configurations/AzureServiceBusQueueConfiguration.cs Queue topology configuration model
src/Mocha/src/Mocha.Transport.AzureServiceBus/Topology/Configurations/AzureServiceBusSubscriptionConfiguration.cs Subscription topology configuration model
src/Mocha/src/Mocha.Transport.AzureServiceBus/Topology/AzureServiceBusMessagingTopology.cs In-memory topology graph + defaults application
src/Mocha/src/Mocha.Transport.AzureServiceBus/Topology/AzureServiceBusTopic.cs Topic resource + best-effort provisioning
src/Mocha/src/Mocha.Transport.AzureServiceBus/Topology/AzureServiceBusQueue.cs Queue resource + best-effort provisioning
src/Mocha/src/Mocha.Transport.AzureServiceBus/Topology/AzureServiceBusSubscription.cs Subscription resource + forwarding provisioning
src/Mocha/src/Mocha.Transport.AzureServiceBus/Conventions/IAzureServiceBusReceiveEndpointTopologyConvention.cs Convention interface for receive-endpoint topology discovery
src/Mocha/src/Mocha.Transport.AzureServiceBus/Conventions/IAzureServiceBusDispatchEndpointTopologyConvention.cs Convention interface for dispatch-endpoint topology discovery
src/Mocha/src/Mocha.Transport.AzureServiceBus/Conventions/IAzureServiceBusReceiveEndpointConfigurationConvention.cs Convention interface for ASB endpoint configuration
src/Mocha/src/Mocha.Transport.AzureServiceBus/Conventions/AzureServiceBusReceiveEndpointTopologyConvention.cs Default topology discovery for receive endpoints
src/Mocha/src/Mocha.Transport.AzureServiceBus/Conventions/AzureServiceBusDispatchEndpointTopologyConvention.cs Default topology discovery for dispatch endpoints
src/Mocha/src/Mocha.Transport.AzureServiceBus/Conventions/AzureServiceBusDefaultReceiveEndpointConvention.cs Applies queue/error/skipped defaults and bus defaults
src/Mocha/src/Mocha.Transport.AzureServiceBus/Middlewares/Receive/AzureServiceBusReceiveMiddlewares.cs Exposes preconfigured receive middleware configurations
src/Mocha/src/Mocha.Transport.AzureServiceBus/Middlewares/Receive/AzureServiceBusAcknowledgementMiddleware.cs Completes/abandons messages based on pipeline outcome
src/Mocha/src/Mocha.Transport.AzureServiceBus/Middlewares/Receive/AzureServiceBusParsingMiddleware.cs Parses ServiceBusReceivedMessage into MessageEnvelope
src/Mocha/src/Mocha.Transport.AzureServiceBus/Features/AzureServiceBusReceiveFeature.cs Pooled feature carrying ProcessMessageEventArgs
src/Mocha/src/Mocha.Transport.AzureServiceBus/AzureServiceBusReceiveEndpoint.cs ServiceBusProcessor-based receive endpoint implementation
src/Mocha/src/Mocha.Transport.AzureServiceBus/AzureServiceBusDispatchEndpoint.cs Sender-based dispatch endpoint implementation + provisioning
src/Mocha/src/Mocha.Transport.AzureServiceBus/AzureServiceBusMessageHeaders.cs Defines internal ASB application-property header keys
src/Mocha/src/Mocha.Transport.AzureServiceBus/AzureServiceBusMessageEnvelopeParser.cs Maps ASB message to normalized envelope + user headers
src/Mocha/examples/AzureServiceBusTransport/aspire.config.json Aspire example configuration entrypoint
src/Mocha/examples/AzureServiceBusTransport/Directory.Build.props Example-level build props (TFM override)
src/Mocha/examples/AzureServiceBusTransport/Directory.Packages.props Example-level central package versions
src/Mocha/examples/AzureServiceBusTransport/.aspire/settings.json Aspire local settings pointing to AppHost
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.AppHost/AzureServiceBusTransport.AppHost.csproj AppHost project wiring services + emulator
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.AppHost/AppHost.cs Emulator entity pre-definition via Config.json mutation
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.AppHost/appsettings.json AppHost logging settings
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.AppHost/appsettings.Development.json AppHost dev logging settings
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.AppHost/Properties/launchSettings.json AppHost launch profiles
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.ServiceDefaults/AzureServiceBusTransport.ServiceDefaults.csproj Shared “service defaults” project for example
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.ServiceDefaults/Extensions.cs OpenTelemetry, health checks, service discovery defaults
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.Contracts/AzureServiceBusTransport.Contracts.csproj Example contracts assembly
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.Contracts/Events/OrderPlacedEvent.cs Example event contract
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.Contracts/Events/OrderShippedEvent.cs Example event contract
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.Contracts/Commands/PrepareShipmentCommand.cs Example request contract (request/reply)
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.Contracts/Commands/ShipmentPreparedResponse.cs Example response contract
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.Contracts/Commands/ProcessOrderCommand.cs Example command contract
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.Contracts/Commands/FulfillOrderRequest.cs Example saga entry request
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.Contracts/Commands/FulfillOrderResponse.cs Example saga final response
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.Contracts/Requests/GetOrderStatusRequest.cs Example request contract
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.Contracts/Requests/GetOrderStatusResponse.cs Example response contract
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.OrderService/AzureServiceBusTransport.OrderService.csproj Example order service
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.OrderService/appsettings.json Order service logging settings
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.OrderService/appsettings.Development.json Order service dev logging settings
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.OrderService/Properties/launchSettings.json Order service launch profiles
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.OrderService/OrderSimulatorWorker.cs Example background order generator
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.OrderService/Sagas/OrderFulfillmentState.cs Example saga state
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.OrderService/Sagas/OrderFulfillmentSaga.cs Example saga orchestration using request/reply + publish
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.OrderService/Mediator/Commands/PlaceOrderCommand.cs Example mediator command + result
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.OrderService/Mediator/Commands/PlaceOrderCommandHandler.cs Publishes cross-service event from mediator command
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.OrderService/Mediator/Queries/GetOrderDetailsQuery.cs Example mediator query + response model
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.OrderService/Mediator/Queries/GetOrderDetailsQueryHandler.cs Example query handler
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.OrderService/Mediator/Notifications/OrderActivityNotification.cs Example mediator notification
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.OrderService/Mediator/Notifications/OrderActivityNotificationHandler.cs Example notification handler
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.OrderService/Handlers/ProcessOrderCommandHandler.cs Example event handler
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.OrderService/Handlers/OrderShippedEventHandler.cs Example event handler
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.OrderService/Handlers/OrderAnalyticsBatchHandler.cs Example batch event handler
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.OrderService/Handlers/GetOrderStatusRequestHandler.cs Example request handler
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.ShippingService/AzureServiceBusTransport.ShippingService.csproj Example shipping service
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.ShippingService/appsettings.json Shipping service logging settings
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.ShippingService/appsettings.Development.json Shipping service dev logging settings
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.ShippingService/Properties/launchSettings.json Shipping service launch profiles
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.ShippingService/Program.cs Shipping service endpoints + ASB wiring
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.ShippingService/Handlers/OrderPlacedEventHandler.cs Shipping service event handler
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.ShippingService/Handlers/PrepareShipmentRequestHandler.cs Shipping service request handler
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.NotificationService/AzureServiceBusTransport.NotificationService.csproj Example notification service
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.NotificationService/appsettings.json Notification service logging settings
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.NotificationService/appsettings.Development.json Notification service dev logging settings
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.NotificationService/Properties/launchSettings.json Notification service launch profiles
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.NotificationService/Program.cs Notification service ASB wiring
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.NotificationService/Handlers/OrderPlacedNotificationHandler.cs Notification handler for placed events
src/Mocha/examples/AzureServiceBusTransport/AzureServiceBusTransport.NotificationService/Handlers/OrderShippedNotificationHandler.cs Notification handler for shipped events
src/Mocha/Mocha.slnx Adds transport + test projects to solution
src/Directory.Packages.props Adds Squadron Azure Service Bus package version

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/Mocha/src/Mocha.Transport.AzureServiceBus/AzureServiceBusDispatchEndpoint.cs Outdated
Wires the ASB transport into Mocha's post-merge scheduling contracts and
adds first-class native dead-lettering:

- Native scheduling: transport declares SupportsSchedulingNatively;
  dispatch endpoint branches on envelope.ScheduledTime and calls
  sender.ScheduleMessageAsync, populating ScheduledMessageFeature.Token
  as "asb:{entity}:{seq}". New AzureServiceBusScheduledMessageStore
  implements IScheduledMessageStore for CancelAsync via
  sender.CancelScheduledMessageAsync(sequenceNumber).

- Native dead-lettering (power-user): new IAzureServiceBusMessageContext
  with DeadLetterAsync(reason, description, props) and
  AbandonAsync(propertiesToModify), accessed via ctx.AzureServiceBus().
  Pooled on the existing AzureServiceBusReceiveFeature — zero extra
  allocation.

- Idempotent settlement: AzureServiceBusAcknowledgementMiddleware now
  wraps Complete/Abandon with a MessageLockLost catch so handler-
  initiated DeadLetterAsync no longer races the outer ack attempt.

- Opt-in native DLQ forwarding: new UseNativeDeadLetterForwarding()
  descriptor method wires queue.ForwardDeadLetteredMessagesTo to the
  endpoint's _error queue, so MaxDeliveryCountExceeded messages land
  in the Mocha-managed error queue instead of $DeadLetterQueue.
  Conflict-detected at provisioning.

Also includes refinements to the cross-transport _skipped fix
(ReceiveDeadLetterMiddleware now targets SkippedEndpoint, previously
committed in a494e39).
Adds docs for the native scheduling integration, IAzureServiceBusMessageContext
power-user API, UseNativeDeadLetterForwarding(), and the _skipped semantic fix.
Creates transports/azure-service-bus.md; updates scheduling.md,
routing-and-endpoints.md, and transports/index.md.
@github-actions github-actions Bot added 📚 documentation This issue is about working on our documentation. 🌶️ website labels Apr 19, 2026
Captures the design plan (plan.md) and the planning fanout artifacts
(.work/plan/: scout reports, divergent approach proposals,
cross-reviews, synthesis + reviewer + devil's advocate critiques)
produced while scoping this PR.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

📚 documentation This issue is about working on our documentation. 🌶️ mocha 🌶️ website

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants