go.temporal.land

Integrations as a Service on Temporal for building reliable, durable, and scalable Cloud Platforms and Data Planes.


Keywords
aws, azure, cosmosdb, distributed-systems, dsl, dynamodb, google-cloud, integrations, kafka, mailchimp, mongodb, nats, rabbitmq, s3, segment, sql, temporal, terraform
License
MPL-2.0
Install
go get go.temporal.land

Documentation

Temporal Land

Temporal Land is an open-source ecosystem of consistent and production-ready workflows and activities for Temporal. This lets developers benefit consistent Integrations as a Service for building reliable and scalable Cloud Platforms and Data Planes.

Useful links:

Features

  • Built for Temporal: With Temporal, developers can run fault-tolerant applications out of the box at any scale. It's the application state management platform most organizations need.

  • Production-ready integrations: Integrations allow to interact with a third-party service by exposing high-level, opiniated, and production-ready Temporal workflows and activities.

  • Rock-solid specifications: Specifications bring strong consistency and a great developer experience by providing the same behavior and APIs across integrations of a same kind.

  • Large ecosystem: By designing integrations on top of specifications, we can expand our ecosystem quickly and efficiently. Existing specifications are only the beginning!

  • Consistent event's context: Every integrations' input accepts a common Context, which can then be used by the integration workflows and activities. It is a dictionary of extra information that provides useful context about an event.

  • Lifecycle's policies: Workflow and activity lifecycle Policies for an integration are set when registering it in the Temporal worker. They can be overridden by the clients when executing a workflow when allowed by the integration to do so.

Integrations

Temporal Land integrations

Temporal Land in a Gist

import (
  "go.temporal.land/specifications/analytics"
  "go.temporal.land/toolkit/event"
  "go.temporal.land/toolkit/lifecycle"
)

client.ExecuteWorkflow(ctx, opts, "mailchimp.Identify", analytics.InputIdentify{
  Context: event.Context{
    IP: net.ParseIP("192.168.1.1"),
  },
  Policies: &analytics.Policies{
    Request: lifecycle.ActivityPolicy{
      SingleAttemptTimeout: 1 * time.Second,
      RetryPolicy: &lifecycle.RetryPolicy{
        BackoffCoefficient: 2,
        MaximumAttempts:    10,
      },
    },
  },
  Identify: analytics.Identify{
    UserID: "f373b459-0959-4217-a3a6-4d4bf4304682",
    Traits: map[string]any{
      "first_name": "Elliot",
      "last_name":  "Anderson",
      "email":      "elliot.anderson@evil.corp",
    },
  },
})

Once registered in a Temporal worker, developers can consume Integrations as a Service from any applications such as Go, Node.js, Python, Java, or PHP.

A consistent Context across all integrations can be set to provide useful context about an event. The integration will automatically apply it.

If allowed by the integration when registered, a client can override workflows and activities Policies to have full control over the event's lifecycle.

In this example, the MailChimp integration (registered as mailchimp) leverages the analytics specification, which is also used by other integrations such as Segment.

License

Repository licensed under the Mozilla Public License, version 2.0.