Skip to content

Add the Google Cloud Pub/Sub transport - #6088

Draft
andreasohlund wants to merge 1 commit into
masterfrom
google-pub-sub
Draft

andreasohlund wants to merge 1 commit into
masterfrom
google-pub-sub

Conversation

@andreasohlund

Copy link
Copy Markdown
Member

Adds Google Cloud Pub/Sub as a transport for the primary, audit, and monitoring instances, using NServiceBus.Transport.GooglePubSub.

Not ready to merge:

  • The package reference is 0.0.0-alpha.0.40, which is not on any feed yet, so CI cannot restore. The transport needs a prerelease on feedz for CI, and 1.0.0 on nuget.org before this merges.
  • The GooglePubSub CI category needs the GCP_WORKLOAD_IDENTITY_PROVIDER, GCP_SERVICE_ACCOUNT, and GOOGLE_CLOUD_PROJECT repository variables, and a service account with roles/pubsub.editor.

Behavior

  • The connection string accepts ProjectId, ResourceNamePrefix, and ServiceEndpoint, all optional, and rejects any other key. Credentials come only from Application Default Credentials, because ServiceControl creates its ingestion, retry, and throughput receivers without a service provider.
  • All instances use ReceiveOnly, the strongest mode the transport supports.
  • The monitoring instance reports no queue lengths yet. Pub/Sub has no backlog API, so a follow-up will read them from Cloud Monitoring.
  • The transport throws for delayed sends and saga timeouts. ServiceControl sends no delayed messages, disables sagas, and sets delayed retries to zero.
  • The primary does not create topics for the integration events it publishes. Until an endpoint subscribes with installers enabled, each publish logs a warning.

Microsoft.Bcl.AsyncInterfaces, Newtonsoft.Json, and System.CodeDom are now pinned, because the transport brought in versions that DuplicateAssembliesInDeploymentUnitsShouldHaveMatchingVersions rejected. The RavenDB persister moves from Newtonsoft.Json 13.0.3 to 13.0.4.

Verification

  • ServiceControl.Transports.GooglePubSub.Tests passes against the Pub/Sub emulator (17 tests). It has not run against a Google Cloud project.
  • The packaged monitoring instance starts against the emulator, creates its queues, and serves its API.
  • Packaging tests pass. The transport names approval runs only on Windows, so it has not run yet.

Docs

  • Added docs/google-pubsub-transport.md and linked it from docs/README.md.
  • Updated docs/testing.md with the CI setup and local emulator steps, docs/usage-report.md with the new key and the settings left out, and the test filter list in README.md.
  • docs/packaging.md and docs/throughput-collection.md need no change.
  • docs.particular.net needs a section in servicecontrol/transports.md once the transport has its own pages.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant