atantares/temporal-bundle

Temporal 的 Symfony 的工作流运行时

2.0.0 2024-09-26 11:57 UTC

This package is auto-updated.

Last update: 2024-09-26 12:22:20 UTC


README

这是一个用于官方 PHP SDK 的包,包含工作流和活动注册以及可配置的工人和工作流客户端。使用的存储库: roadrunner-bundletemporal-bundletemporal-bundle-vanta

要求

  • php >= 8.1
  • symfony >= 6.0

安装

使用以下命令进行安装 composer require atantares/temporal-bundle

用法

示例配置

# config/packages/temporal.yaml
temporal:
  defaultClient: default
  pool:
    dataConverter: temporal.data_converter
    roadrunnerRPC: '%env(RR_RPC)%'

  workers:
    default:
      taskQueue: default
      exceptionInterceptor: temporal.exception_interceptor
      finalizers:
        - temporal.doctrine_ping_connection_default.finalizer
        - temporal.doctrine_clear_entity_manager.finalizer
      interceptors:
        - temporal.doctrine_ping_connection_default_activity_inbound.interceptor

  clients:
    default:
      namespace: default
      address: '%env(TEMPORAL_ADDRESS)%'
      dataConverter: temporal.data_converter
    cloud:
      namespace: default
      address: '%env(TEMPORAL_ADDRESS)%'
      dataConverter: temporal.data_converter
      clientKey: '%env(TEMPORAL_CLIENT_KEY_PATH)%'
      clientPem: '%env(TEMPORAL_CLIENT_CERT_PATH)%'

Doctrine 集成

如果使用 DoctrineBundle,以下终结器可用于您

  • temporal.doctrine_ping_connection_<entity-mananger-name>.finalizer
  • temporal.doctrine_clear_entity_manager.finalizer

拦截器

  • temporal.doctrine_ping_connection_<entity-mananger-name>_activity_inbound.interceptor

创建 rr.yaml

version: "3"

server:
  command: "php public/index.php"
  env:
    - APP_RUNTIME: Atantares\TemporalBundle\Runtime\TemporalRuntime

temporal:
  address: "temporal:7233"
  namespace: 'default' # Configure a temporal namespace (you must create a namespace manually or use the default namespace named "default")
  activities:
    num_workers: 4 # Set up your worker count

# Set up your values
logs:
  mode: production
  output: stdout
  err_output: stderr
  encoding: json
  level: error

rpc:
  listen: tcp://0.0.0.0:6001

工作流示例

<?php

declare(strict_types=1);

namespace App\Workflow;

use Vanta\Integration\Symfony\Temporal\Attribute\AssignWorker;
use Temporal\Workflow\WorkflowInterface;

#[AssignWorker(name: 'worker1')]
#[WorkflowInterface]
final class MoneyTransferWorkflow
{
    #[WorkflowMethod]
    public function transfer(...): \Generator;

    #[SignalMethod]
    function withdraw(): void;

    #[SignalMethod]
    function deposit(): void;
}

活动示例

<?php

declare(strict_types=1);

namespace App\Workflow;

use Vanta\Integration\Symfony\Temporal\Attribute\AssignWorker;
use Temporal\Activity\ActivityInterface;
use Temporal\Activity\ActivityMethod;

#[AssignWorker(name: 'worker1')]
#[ActivityInterface(...)]
final class MoneyTransferActivity
{
    #[ActivityMethod]
    public function transfer(...): int;

    #[ActivityMethod]
    public function cancel(...): bool;
}

更多 PHP 示例,您可以在 这里 找到。

现在您可以启动工人

rr serve rr.yaml

鸣谢

许可证

MIT 许可证

版权 (c) 2024 Atantares

特此授予任何获得本软件及其相关文档副本(“软件”)的人免费使用软件的权利,不受任何限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许提供软件的人为此目的进行操作,前提是以下条件

上述版权声明和本许可声明应包含在软件的所有副本或实质性部分中。

软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途的适用性和非侵权性。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论这些责任是基于合同、侵权或其他方式,源于、涉及或与软件或软件的使用或其他交易有关。