rapidkit / laravel-camunda-client
高级模型,类似于Eloquent,通过REST API与Camunda资源进行交互。
v1.1.1
2024-07-22 12:52 UTC
Requires
- php: ^8.1
- guzzlehttp/guzzle: ^7.8
- illuminate/contracts: ^10.0
- spatie/laravel-data: ^3.8
- spatie/laravel-package-tools: ^1.14.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.9
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^8.0
- pestphp/pest: ^2.0
- pestphp/pest-plugin-arch: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- pestphp/pest-plugin-type-coverage: ^2.2
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
This package is not auto-updated.
Last update: 2024-09-21 23:45:47 UTC
README
介绍一款方便的Laravel HTTP客户端包装器,旨在简化您与Camunda REST API的交互。这个专用工具简化了将您的Laravel应用程序连接到Camunda的过程,让您轻松发送请求和检索数据。使用这个包装器,您可以高效地将Camunda强大的工作流自动化功能集成到您的Laravel项目中,使管理和编排复杂业务流程更加容易。告别繁琐的手动API调用,迎接更顺畅、更高效的Camunda工作流集成。
安装
您可以通过composer安装此包
composer require rapidkit/laravel-camunda-client
您可以使用以下命令发布配置文件
php artisan vendor:publish --tag='laravel-camunda-client-config'
这是发布配置文件的内容
return [ 'url' => env('CAMUNDA_URL', 'http://127.0.0.1:8080/engine-rest'), 'user' => env('CAMUNDA_USER', 'demo'), 'password' => env('CAMUNDA_PASSWORD', 'demo'), 'tenant_id' => env('CAMUNDA_TENANT_ID', ''), ];
用法
流程定义
use RapidKit\LaravelCamundaClient\Http\ProcessDefinitionClient; $variables = ['title' => ['value' => 'Sample Title', 'type' => 'string']]; // Start new process instance $instance = ProcessDefinitionClient::start(key: 'process_1', variables: $variables); // Start new process instance with some business key $instance = ProcessDefinitionClient::start(key: 'process_1', variables: $variables, businessKey: 'somekey'); // Get BPMN definition in XML format ProcessDefinitionClient::xml(key: 'process_1'); ProcessDefinitionClient::xml(id: 'process_1:xxxx'); // Get all definition ProcessDefinitionClient::get(); // Get definitions based on some parameters $params = ['latestVersion' => true]; ProcessDefinitionClient::get($params);
参考
流程实例
use RapidKit\LaravelCamundaClient\Http\ProcessInstanceClient; // Find by ID $processInstance = ProcessInstanceClient::find(id: 'some-id'); // Get all instances ProcessInstanceClient::get(); // Get instances based on some parameters $params = ['businessKeyLike' => 'somekey']; ProcessInstanceClient::get($params); ProcessInstanceClient::variables(id: 'some-id'); ProcessInstanceClient::delete(id: 'some-id');
消息开始事件
use RapidKit\LaravelCamundaClient\Http\MessageEventClient; MessageEventClient::start(messageName: 'testing', businessKey: 'businessKey');
消息事件
use Laravolt\Camunda\Http\MessageEventClient; // Start processinstance with message event // Required // messageName : message event name // businessKey : Busniess key for process instance // Rerturn Process insntance from message event MessageEventClient::start(messageName: "testing", businessKey: "businessKey") $vars = ['title' => ['type' => 'String', 'value' => 'Sample Title']]; MessageEventClient::start(messageName: 'testing', businessKey: 'businessKey', variables: $vars);
任务
use RapidKit\LaravelCamundaClient\Http\TaskClient; $task = TaskClient::find(id: 'task-id'); $tasks = TaskClient::getByProcessInstanceId(id: 'process-instance-id'); $tasks = TaskClient::getByProcessInstanceIds(ids: 'arrayof-process-instance-ids'); TaskClient::submit(id: 'task-id', variables: ['name' => ['value' => 'Foo', 'type' => 'String']]); // will return true or false $variables = TaskClient::submitAndReturnVariables(id: 'task-id', variables: ['name' => ['value' => 'Foo', 'type' => 'String']]) // will return array of variable // Claim a Task $tasks = TaskClient::claim($task_id, $user_id); // Unclaim a Task $tasks = TaskClient::unclaim($task_id); // Assign a Task $tasks = TaskClient::assign($task_id, $user_id);
外部任务
use RapidKit\LaravelCamundaClient\Http\ExternalTaskClient; $topics = [['topicName' => 'pdf', 'lockDuration' => 600_000]]; $externalTasks = ExternalTaskClient::fetchAndLock('worker1', $topics); foreach ($externalTasks as $externalTask) { // do something with $externalTask // Mark as complete after finished ExternalTaskClient::complete($externalTask->id); } // Release some task ExternalTaskClient::unlock($task->id) // Get task locked $externalTaskLocked = ExternalTaskClient::getTaskLocked();
消耗外部任务
通过 php artisan make:job <JobName>
创建一个新的作业来消耗外部任务,并修改骨架
use RapidKit\LaravelCamundaClient\Data\ExternalTaskData; use RapidKit\LaravelCamundaClient\Http\ExternalTaskClient; public function __construct( public string $workerId, public ExternalTaskData $task ) { } public function handle() { // Do something with $this->task, e.g: get the variables and generate PDF $variables = \RapidKit\LaravelCamundaClient\Http\ProcessInstanceClient::variables($this->task->processDefinitionId); // PdfService::generate() // Complete the task $status = ExternalTaskClient::complete($this->task->id, $this->workerId); }
订阅某些主题
// AppServiceProvider.php use RapidKit\LaravelCamundaClient\Http\ExternalTaskClient; public function boot() { ExternalTaskClient::subscribe('pdf', GeneratePdf::class); }
注册调度器
// app/Console/Kernel.php protected function schedule(Schedule $schedule) { $schedule->command('camunda:consume-external-task --workerId=worker1')->everyMinute(); }
如果您需要更短的池化时间(每分钟以下频率),请查看 Laravel Short Schedule。
参考
- https://laravel.net.cn/docs/master/scheduling
- https://laravel.net.cn/docs/master/queues
- https://github.com/spatie/laravel-short-schedule
任务历史(完成任务)
use RapidKit\LaravelCamundaClient\Http\TaskHistoryClient; $completedTask = TaskHistoryClient::find(id: 'task-id'); $completedTasks = TaskHistoryClient::getByProcessInstanceId(id: 'process-instance-id');
部署
use RapidKit\LaravelCamundaClient\Http\DeploymentClient; // Deploy bpmn file(s) DeploymentClient::create('test-deploy', '/path/to/file.bpmn'); DeploymentClient::create('test-deploy', ['/path/to/file1.bpmn', '/path/to/file2.bpmn']); // Get deployment list DeploymentClient::get(); // Find detailed info about some deployment DeploymentClient::find($id); // Truncate (delete all) deployments $cascade = true; DeploymentClient::truncate($cascade); // Delete single deployment DeploymentClient::delete(id: 'test-deploy', cascade: $cascade);
原始端点
您可以使用 RapidKit\LaravelCamundaClient\CamundaClient
调用任何Camunda REST端点。
use RapidKit\LaravelCamundaClient\CamundaClient; $response = CamundaClient::make()->get('version'); echo $response->status(); // 200 echo $response->object(); // sdtClass echo $response->json(); // array, something like ['version' => '7.14.0']
CamundaClient::make()
是一个包装器,用于 Laravel HTTP客户端,其基础URL已根据您的Camunda服务配置设置。更多信息请参阅文档。
测试
composer test
变更日志
请参阅 变更日志 了解最近的变化。
贡献
请参阅 贡献指南 获取详细信息。
安全漏洞
请参阅 我们的安全策略 了解如何报告安全漏洞。
鸣谢
许可证
MIT许可证(MIT)。更多信息请参阅 许可证文件。