项目作者: pay-k

项目描述 :
Zeebe transport and client for nestjs framework
高级语言: TypeScript
项目地址: git://github.com/pay-k/nestjs-zeebe.git
创建时间: 2019-09-01T10:28:02Z
项目社区:https://github.com/pay-k/nestjs-zeebe

开源协议:MIT License

下载



Nest Logo

NestJS Zeebe Connector (Transport and Client)

A zeebe transport and client for NestJS

Using the zeebe-node module and exposing it as a NestJS transport and module.



Build Status

Install

  1. npm install @payk/nestjs-zeebe

Basic usage

  1. // app.module.ts
  2. import { Module } from '@nestjs/common';
  3. import { AppController } from './app.controller';
  4. import { ZeebeModule, ZeebeServer } from '@payk/nestjs-zeebe';
  5. @Module({
  6. imports: [ ZeebeModule.forRoot({ gatewayAddress: 'localhost:26500' })],
  7. controllers: [AppController],
  8. providers: [ZeebeServer],
  9. })
  10. export class AppModule {}
  1. // main.ts
  2. import { NestFactory } from '@nestjs/core';
  3. import { AppModule } from './app.module';
  4. import { ZeebeServer } from '@payk/nestjs-zeebe';
  5. async function bootstrap() {
  6. const app = await NestFactory.create(AppModule);
  7. const microservice = app.connectMicroservice({
  8. strategy: app.get(ZeebeServer),
  9. });
  10. await app.startAllMicroservicesAsync();
  11. await app.listen(3000);
  12. }
  13. bootstrap();
  1. // app.controller.ts
  2. import { Controller, Get, Inject } from '@nestjs/common';
  3. import { AppService } from './app.service';
  4. import { ZBClient } from 'zeebe-node';
  5. import { CreateWorkflowInstanceResponse, CompleteFn, Job } from 'zeebe-node/interfaces';
  6. import { ZEEBE_CONNECTION_PROVIDER, ZeebeWorker } from '@payk/nestjs-zeebe';
  7. import {
  8. Ctx,
  9. Payload,
  10. } from '@nestjs/microservices';
  11. @Controller()
  12. export class AppController {
  13. constructor(private readonly appService: AppService, @Inject(ZEEBE_CONNECTION_PROVIDER) private readonly zbClient: ZBClient) {}
  14. // Use the client to create a new workflow instance
  15. @Get()
  16. getHello() : Promise<CreateWorkflowInstanceResponse> {
  17. return this.zbClient.createWorkflowInstance('order-process', { test: 1, or: 'romano'});
  18. }
  19. // Subscribe to events of type 'payment-service
  20. @ZeebeWorker('payment-service')
  21. paymentService(@Payload() job, @Ctx() fn: CompleteFn<any> {
  22. console.log('Payment-service, Task variables', job.variables);
  23. let updatedVariables = Object.assign({}, job.variables, {
  24. paymentService: 'Did my job',
  25. });
  26. // Task worker business logic goes here
  27. complete.success(updatedVariables);
  28. }
  29. // Subscribe to events of type 'inventory-service and create a worker with the options as passed below (zeebe-node ZBWorkerOptions)
  30. @ZeebeWorker('inventory-service', { maxJobsToActivate: 10, timeout: 300 })
  31. inventoryService(@Payload() job, @Ctx() fn: CompleteFn<any>) {
  32. console.log('inventory-service, Task variables', job.variables);
  33. let updatedVariables = Object.assign({}, job.variables, {
  34. inventoryVar: 'Inventory donnnneee',
  35. });
  36. // Task worker business logic goes here
  37. complete.success(updatedVariables);
  38. }
  39. }