External Task

Integrasi AlurKerja dengan sistem eksternal untuk menjalankan tugas-tugas tertentu.

Gambaran Umum

External Task adalah fitur dalam AlurKerja yang memungkinkan integrasi dengan sistem eksternal untuk menjalankan tugas-tugas tertentu dalam alur kerja. Dengan menggunakan External Task, AlurKerja dapat terhubung dengan aplikasi atau layanan lain melalui protokol HTTP, sehingga memberikan fleksibilitas dalam pengelolaan proses bisnis.

Tahapan

Pendefinisian External Task

Dalam model BPMN, External Task dapat didefinisikan dengan menggunakan elemen External Task.

External Task Properties
PropertiDeskripsi
TypeExternal
Topicstring Nama topik
Prioritynumber Prioritas task. Semakin tinggi, semakin didahulukan untuk dikerjakan.

Proses akan berhenti pada External Task sampai ada worker yang mengambil tugas tersebut.

External Task Properties

Pengambilan External Task

Untuk mengambil External Task, worker eksternal harus melakukan HTTP GET request ke endpoint AlurKerja yang sesuai dengan topik yang telah didefinisikan. Endpoint ini akan mengembalikan detail tugas yang harus dikerjakan, termasuk ID tugas, topik, dan informasi lainnya.

POST /external-task/featchAndLock

Contoh response

[
  {
    "activityId": "anActivityId",
    "activityInstanceId": "anActivityInstanceId",
    "errorMessage": "anErrorMessage",
    "errorDetails": "anErrorDetails",
    "executionId": "anExecutionId",
    "id": "anExternalTaskId",
    "lockExpirationTime": "2015-10-06T16:34:42.000+0200",
    "processDefinitionId": "aProcessDefinitionId",
    "processDefinitionKey": "aProcessDefinitionKey",
    "processInstanceId": "aProcessInstanceId",
    "tenantId": null,
    "retries": 3,
    "workerId": "aWorkerId",
    "priority": 4,
    "topicName": "createOrder",
    "variables": {
      "orderId": {
        "type": "String",
        "value": "1234",
        "valueInfo": {}
      }
    }
  },
  {
    "activityId": "anActivityId",
    "activityInstanceId": "anActivityInstanceId",
    "errorMessage": "anErrorMessage",
    "errorDetails": "anotherErrorDetails",
    "executionId": "anExecutionId",
    "id": "anExternalTaskId",
    "lockExpirationTime": "2015-10-06T16:34:42.000+0200",
    "processDefinitionId": "aProcessDefinitionId",
    "processDefinitionKey": "aProcessDefinitionKey",
    "processInstanceId": "aProcessInstanceId",
    "tenantId": null,
    "retries": 3,
    "workerId": "aWorkerId",
    "priority": 0,
    "topicName": "createOrder",
    "variables": {
      "orderId": {
        "type": "String",
        "value": "3456",
        "valueInfo": {}
      }
    }
  }
]

Penyelesaian External Task

Setelah worker eksternal menyelesaikan tugas, mereka harus mengirimkan HTTP POST request ke endpoint AlurKerja untuk menyelesaikan tugas tersebut. Request ini harus mencakup ID tugas dan hasil dari tugas yang telah dikerjakan.

POST /external-task/{id}/complete
Content-Type: application/json
{
  "variables": {
    "result": "hasil dari tugas"
  }
}

Penanganan Kegagalan

Jika worker eksternal mengalami kegagalan dalam menyelesaikan tugas, mereka dapat mengirimkan HTTP POST request ke endpoint AlurKerja untuk menandai tugas sebagai gagal. Request ini harus mencakup ID tugas dan alasan kegagalan.

POST /external-task/{id}/fail
Content-Type: application/json
{
  "errorMessage": "Alasan kegagalan",
    "variables": {
    "errorDetails": "Detail kesalahan yang terjadi"
    }
}

Demo

Kelebihan External Task

  • Integrasi Mudah: AlurKerja dapat berkomunikasi dengan sistem eksternal melalui HTTP, memungkinkan integrasi yang fleksibel.
  • Polyglot Architectures: Tugas spesifik dapat ditulis dalam berbagai bahasa pemrograman, sehingga dapat memanfaatkan alat dan teknologi yang paling sesuai.
  • Skalabilitas: Tugas-tugas (tasks) dapat didistribusikan ke banyak worker secara paralel, sehingga memungkinkan sistem untuk melakukan skala horizontal. Hal ini bermanfaat ketika volume proses meningkat, karena kapasitas pemrosesan dapat ditingkatkan dengan menambahkan worker baru tanpa mengubah arsitektur utama.
  • Ketahanan Sistem (Resilience): Worker eksternal berjalan secara independen dari engine BPMN, sehingga meningkatkan ketahanan sistem secara keseluruhan. Jika worker mengalami kegagalan, proses utama dalam workflow tidak langsung terpengaruh, dan worker dapat dimonitor atau direstart secara terpisah.

Kekurangan External Task

  • Ketergantungan Eksternal: Mengandalkan sistem eksternal dapat menambah kompleksitas dan potensi titik kegagalan.
  • Overhead Jaringan: Komunikasi melalui HTTP dapat menambah latensi, terutama jika sistem eksternal berada di lokasi yang jauh atau tidak stabil.