-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
area-cloud-nativeCloud-Native patterns and integrationsCloud-Native patterns and integrationsarea-serverlessServerless (AWS Lambda, Azure Functions)Serverless (AWS Lambda, Azure Functions)area-transportMessage transport/broker implementationsMessage transport/broker implementationscloud-gcpGoogle Cloud PlatformGoogle Cloud Platformcomplexity-highComplexity: HighComplexity: HighenhancementNew feature or requestNew feature or requestindustry-best-practiceIndustry-proven pattern from major tech companiesIndustry-proven pattern from major tech companiesnew-packageRequires creating a new NuGet packageRequires creating a new NuGet packagephase-2-functionalityPhase 2: Functionality - new featuresPhase 2: Functionality - new featurespriority-highPriority: High (⭐⭐⭐⭐)Priority: High (⭐⭐⭐⭐)transport-pubsubGoogle Cloud Pub/SubGoogle Cloud Pub/Sub
Milestone
Description
Summary
Add Google Cloud Pub/Sub as a message transport to complete the cloud provider triangle (AWS, Azure, GCP).
Motivation
- GCP is one of the three major cloud providers
- Many enterprises use GCP for their infrastructure
- Pub/Sub offers dead-letter queues, filtering, and horizontal scalability similar to Azure Service Bus
- Completes Encina's cloud-native story
Proposed Solution
New Package
Encina.GoogleCloudPubSub
Interfaces
IGoogleCloudPubSubMessagePublisher- Integration with
Google.Cloud.PubSub.V1SDK
Features
- Topic/Subscription model
- Message ordering (ordering keys)
- Dead-letter topics
- Message filtering
- Exactly-once delivery
- Push and pull subscriptions
Configuration
services.AddEncinaGoogleCloudPubSub(options =>
{
options.ProjectId = "my-project";
options.TopicId = "my-topic";
options.SubscriptionId = "my-subscription";
});Alternatives Considered
-
AWS/Azure only: Supporting only AWS and Azure cloud providers. This excludes GCP users.
-
Generic HTTP API: Using a generic HTTP publisher instead of native SDK. This loses GCP-specific features and optimizations.
-
Dapr for GCP: Using Dapr with GCP Pub/Sub component. This adds Dapr dependency for simple GCP scenarios.
Affected Packages
- Encina (core)
- Encina.AspNetCore
- Encina.EntityFrameworkCore
- Encina.Dapper.*
- Encina.ADO.*
- Encina.MongoDB
- Encina.Messaging
- Encina.Caching.*
- Other:
Encina.GoogleCloudPubSub
Additional Context
Implementation Tasks
- Create
Encina.GoogleCloudPubSubpackage - Implement publisher
- Implement consumer/subscriber
- Message ordering support
- Dead-letter topic handling
- Message filtering
- Health check integration
- OpenTelemetry traces/metrics
- Unit tests
- Integration tests with emulator
References
Acceptance Criteria
- Publisher implementation
- Consumer/Subscriber implementation
- Message ordering support
- Dead-letter topic handling
- Health check integration
- OpenTelemetry traces/metrics
- Unit tests
- Integration tests with emulator
Related Issues
- Encina.AmazonSQS (existing)
- Encina.AzureServiceBus (existing)
Metadata
Metadata
Assignees
Labels
area-cloud-nativeCloud-Native patterns and integrationsCloud-Native patterns and integrationsarea-serverlessServerless (AWS Lambda, Azure Functions)Serverless (AWS Lambda, Azure Functions)area-transportMessage transport/broker implementationsMessage transport/broker implementationscloud-gcpGoogle Cloud PlatformGoogle Cloud Platformcomplexity-highComplexity: HighComplexity: HighenhancementNew feature or requestNew feature or requestindustry-best-practiceIndustry-proven pattern from major tech companiesIndustry-proven pattern from major tech companiesnew-packageRequires creating a new NuGet packageRequires creating a new NuGet packagephase-2-functionalityPhase 2: Functionality - new featuresPhase 2: Functionality - new featurespriority-highPriority: High (⭐⭐⭐⭐)Priority: High (⭐⭐⭐⭐)transport-pubsubGoogle Cloud Pub/SubGoogle Cloud Pub/Sub