{"id":27240634,"url":"https://github.com/kevinmichaelchen/temporal-saga-grpc","last_synced_at":"2025-08-24T00:20:02.272Z","repository":{"id":62865740,"uuid":"549205429","full_name":"kevinmichaelchen/temporal-saga-grpc","owner":"kevinmichaelchen","description":"Using Temporal to orchestrate distributed transactions (sagas) across Golang microservices","archived":false,"fork":false,"pushed_at":"2024-05-22T17:57:28.000Z","size":2750,"stargazers_count":9,"open_issues_count":16,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-04T09:08:24.487Z","etag":null,"topics":["buf","connect-go","distributed-transaction","golang","grpc","microservice","microservices","opentelemetry","otel","remote-generation","saga","temporal"],"latest_commit_sha":null,"homepage":"https://kevinmichaelchen.github.io/temporal-saga-grpc/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kevinmichaelchen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-10-10T20:54:22.000Z","updated_at":"2024-12-14T15:37:14.000Z","dependencies_parsed_at":"2023-02-16T21:20:17.982Z","dependency_job_id":"63a3ad2d-cd28-499f-b342-7b8880c0b670","html_url":"https://github.com/kevinmichaelchen/temporal-saga-grpc","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kevinmichaelchen%2Ftemporal-saga-grpc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kevinmichaelchen%2Ftemporal-saga-grpc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kevinmichaelchen%2Ftemporal-saga-grpc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kevinmichaelchen%2Ftemporal-saga-grpc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kevinmichaelchen","download_url":"https://codeload.github.com/kevinmichaelchen/temporal-saga-grpc/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248281414,"owners_count":21077423,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["buf","connect-go","distributed-transaction","golang","grpc","microservice","microservices","opentelemetry","otel","remote-generation","saga","temporal"],"created_at":"2025-04-10T19:36:08.402Z","updated_at":"2025-04-10T19:36:09.051Z","avatar_url":"https://github.com/kevinmichaelchen.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# temporal-saga-grpc\n\n[![Lines Of Code](https://aschey.tech/tokei/github/kevinmichaelchen/temporal-saga-grpc?category=code\u0026style=for-the-badge)](https://github.com/kevinmichaelchen/temporal-saga-grpc)\n\n\u003cp align=\"center\"\u003e\n\n![./docs/public/diagrams/architecture.svg](./docs/public/diagrams/architecture.svg)\n\n\u003c/p\u003e\n\nThis project demonstrates using\n\u003ca target=\"_blank\" href=\"https://temporal.io/\"\u003eTemporal\u003c/a\u003e to orchestrate a\n\u003ca target=\"_blank\" href=\"https://microservices.io/patterns/data/saga.html\"\u003esaga\u003c/a\u003e\n(effectively a distributed transaction) that interacts with multiple services\nand has a robust, edge-case-proof rollback strategy, as well as durable function\nexecution. **Temporal abstracts away failures.**\n\n## Getting started\n\n### Step 1: Spin everything up\n\nYou can spin everything up with:\n\n```shell\nmake\n```\n\n\u003e [!NOTE]\n\u003e\n\u003e Under the hood, we use a bunch of tools (which you can read about [here][tech-stack]), but to run things seamlessly locally, the one tool you will need is [pkgx][pkgx].\n\n[tech-stack]: https://kevinmichaelchen.github.io/temporal-saga-grpc/architecture/overview/\n[pkgx]: https://pkgx.sh/\n\n### Step 2: Observe the workflow\n\nLet's get ready to observe this thing in action!\n\n- View traces in Jaeger — [localhost:16686][jaeger-ui].\n- View the workflow in Temporal's UI — [localhost:8233][temporal-ui].\n\n[temporal-ui]: http://localhost:8233\n[jaeger-ui]: http://localhost:16686\n\n### Step 3: Start a Temporal Workflow\n\n```shell\ncurl -v http://localhost:8081/temporal.v1beta1.TemporalService/CreateOnboardingWorkflow \\\n  -H \"Content-Type: application/json\" \\\n  --data-binary @- \u003c\u003cEOF\n  {\n    \"license\": {\n      \"start\": \"2023-11-16T12:00:00Z\",\n      \"end\": \"2024-01-16T12:00:00Z\"\n    },\n    \"org\": {\n      \"name\": \"Org 1\"\n    },\n    \"profile\": {\n      \"full_name\": \"Kevin Chen\"\n    }\n  }\nEOF\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkevinmichaelchen%2Ftemporal-saga-grpc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkevinmichaelchen%2Ftemporal-saga-grpc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkevinmichaelchen%2Ftemporal-saga-grpc/lists"}