Skip to content

Latest commit

 

History

History
72 lines (57 loc) · 2.59 KB

README.md

File metadata and controls

72 lines (57 loc) · 2.59 KB

Pub/Sub Emulator Config

Creates topics and subscriptions for Google Pub/Sub local emulation.

Usage

You can define topics & subscriptions in two ways

  • Environment variables using PUBSUB_PROJECT1=...
  • Docker labels using pubsubc.config1=...

Environment Variables

The code looks for environment consecutive variables like PUBSUB_PROJECT1 containing a comma separated string.

The first item in the the string is the project name and subsequent items are the topics.

Each topic is a colon delimited string where the first item is the topic name and subsequent items are subscriptions to that topic.

Example:

PUBSUB_PROJECT1=project-name,topic1,topic2:subscription1:subscription2
PUBSUB_PROJECT2=project-two,topicA,topicB:subscriptionX:subscriptionY

Push Subscriptions

The subscription string can be used to create a push subscription by appending the push endpoint to it separated by a +.

Examples:

NOTE We cannot use : in the URLs as it conflicts with the pre-existing topic delimiter. So we replace | with : for you. If you do not provide a protocol, we assume http.

PUBSUB_PROJECT1=project-name,topic:push-subscription+endpoint
PUBSUB_PROJECT1=project-name,topic:push-subscription+https|//endpoint/path
PUBSUB_PROJECT1=project-name,topic:push-subscription+http|//endpoint|8080/path

Docker Labels

When using this tool as part of a larger collection of applications, we support reading project/topic/subscription configurations directly from the Docker daemon, using the labels of other containers.

This means that this single container can support many projects without needing custom configuration for each one. Instead, your application dockerfiles define their Pub/Sub needs in a declarative way. Other projects like Traefik adopt this paradigm too.

For example (partial Dockerfile):

version: '3.7'
services:

  # Your application service
  myapp:
    image: busybox:latest
    environment:
      - PUBSUB_EMULATOR_HOST=pubsub-emulator:8681
    labels:
      - 'pubsubc.config1=project-one,topic1,topic2:subscription1:subscription2'
      - 'pubsubc.config2=project-two,topic:push-subscription+endpoint'

  # Pub/Sub Emulator. We mount the docker socket so we can user the Docker API
  pubsub-emulator:
    image: fluentthinking/gcloud-pubsub-emulator:latest
    ports:
      - '8681:8681'
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

TODO:

  • Push subscriptions currently only support HTTP; it would be good to support HTTP and HTTPS
  • Push subscription Ack Deadline is explicitly set to 60s; should be configurable