استفاده از کاموندا برای ارکستراسیون آسان بر اساس REST و Workflow Engine (بدون جاوا)

هی هابر! ترجمه مقاله را مورد توجه شما قرار می دهم از کاموندا به عنوان یک موتور ارکستراسیون و گردش کار با استفاده آسان مبتنی بر REST (بدون لمس جاوا) استفاده کنید. توسط برند روکر

07.07.2020/XNUMX/XNUMX، ترجمه مقاله برند راکر

استفاده از کاموندا برای ارکستراسیون آسان بر اساس REST و Workflow Engine (بدون جاوا)

من اغلب در مورد معماری میکروسرویس با افراد غیر جاوا صحبت می کنم: توسعه دهندگان سی شارپ، توسعه دهندگان Node.JS/JavaScript یا علاقه مندان به Golang. همه آنها با این واقعیت روبرو هستند که به یک مکانیزم ارکستراسیون در یک معماری میکروسرویس یا فقط ابزاری برای ساده کردن گردش کار و به دست آوردن توانایی سفارش، رسیدگی به زمان‌های زمانی، Saga و تراکنش‌های جبرانی نیاز دارند.

پلت فرم BPM با منبع باز از کاموندا عالی برای چنین کارهایی دوستی با توسعه دهنده یکی از ویژگی های کلیدی محصول است. اما اگر به مستندات آن نگاه کنید، ممکن است این تصور را داشته باشید که "دوستانه" کاموندا عمدتاً توسعه دهندگان جاوا را هدف قرار داده است. این پلتفرم گزینه های زیادی را برای اتصال توابع و برنامه های افزودنی شما فراهم می کند، اما همه اینها در جاوا انجام می شود. آیا واقعا؟

نه! در واقع، شما به راحتی می توانید کاموندا را بدون هیچ دانش جاوا اجرا کنید و معماری کد را به هر زبانی که می خواهید تنظیم کنید. در این مقاله به این موارد خواهیم پرداخت:

  • معماری پایه؛
  • REST API
  • مشاوره در مورد کتابخانه های مشتری موجود برای زبان های غیر از جاوا؛
  • مثال با استفاده از C# و Node.JS.
  • راه های راه اندازی سرور کاموندا (Docker یا Tomcat).

معماری

کاموندا به زبان جاوا نوشته شده است و برای اجرا به ماشین مجازی جاوا (JVM) نیاز دارد. کاموندا یک API REST ارائه می دهد که به شما امکان می دهد به هر زبانی که دوست دارید بنویسید و از REST با کاموندا استفاده کنید:

استفاده از کاموندا برای ارکستراسیون آسان بر اساس REST و Workflow Engine (بدون جاوا)

گردش کار در کاموندا در BPMN تعریف شده است که اساسا یک فایل XML است. می توان با آن مدل کرد کاموندا مدلر.

اجرای کاموندا از طریق یک تصویر از پیش ساخته شده Docker

ساده ترین راه برای اجرای کاموندا استفاده از داکر است. روش های جایگزین برای راه اندازی کاموندا در ادامه این مقاله توضیح داده شده است.

استفاده از کاموندا برای ارکستراسیون آسان بر اساس REST و Workflow Engine (بدون جاوا)

در این مورد، به سادگی اجرا کنید:

  docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest

لازم نیست نگران لینوکس، JVM یا تامکت باشید. Dockerfiles و اسناد اولیه (به عنوان مثال، دستورالعمل برای اتصال به پایگاه های داده مورد نیاز) در دسترس هستند گیتهاب.

اگر می خواهید Camunda Enterprise Edition را اجرا کنید، می توانید به راحتی تغییر دهید dockerfile.

با این حال، اجرای کاموندا با داکر یک نقطه ضعف دارد: در نهایت با نسخه‌ای از تامکت مواجه خواهید شد که همیشه آخرین اصلاحات را شامل نمی‌شود. برای حل این مشکل، می‌توانید مطابق با این مثال، تصویر Docker خود را بر اساس توزیع Tomcat مورد نظر ایجاد کنید یا از یکی از راه‌حل‌های توضیح داده شده در زیر استفاده کنید.

استقرار مدل فرآیند

بیایید به مثالی با استفاده از الگوی Saga برای رزرو سفر کلاسیک نگاه کنیم که در آن می‌خواهید سه اقدام متوالی را فعال کنید و در صورت شکست بعدی، به‌خوبی اقدامات انجام شده با موفقیت را جبران کنید. که در فرم BPMN نشان داده شده است، به نظر می رسد:

استفاده از کاموندا برای ارکستراسیون آسان بر اساس REST و Workflow Engine (بدون جاوا)

اکنون می توانید استفاده کنید REST API برای استقرار مدل فرآیند. فرض کنید آن را به عنوان trip.bpmn ذخیره کرده و Camunda را از طریق Docker اجرا کنید تا در localhost:8080 در دسترس باشد:

  curl -w "n" 
-H "Accept: application/json" 
-F "deployment-name=trip" 
-F "enable-duplicate-filtering=true" 
-F "deploy-changed-only=true" 
-F "[email protected]" 
http://localhost:8080/engine-rest/deployment/creat

حالا می توانید بدوید نمونه های گردش کار جدید با استفاده از REST API و انتقال داده هایی که می خواهید به عنوان متغیرهای نمونه گردش کار مشاهده کنید:

  curl 
-H "Content-Type: application/json" 
-X POST 
-d '{"variables":{"someData" : {"value" : "someValue", "type": "String"}},"businessKey" : "12345"}}' 
http://localhost:8080/engine-rest/<!-- -->process-definition/key/<!-- -->FlowingTripBookingSaga<!-- -->/start

سوال جالب بعدی این است: چگونه کاموندا رویه هایی مانند رزرو ماشین را فرا می خواند؟ کاموندا نه تنها می‌تواند بلافاصله با سرویس‌ها تماس بگیرد (Push-Principle) با استفاده از برخی داخلی‌ها اتصال دهنده ها، بلکه موارد کار را به نوعی نظم داخلی قرار دهید. سپس کارگر می تواند موارد کار را از طریق REST واکشی کند، کار را انجام دهد و به کاموندا بگوید (Pull-Principle) را تکمیل کند.

استفاده از کاموندا برای ارکستراسیون آسان بر اساس REST و Workflow Engine (بدون جاوا)

پس ابتدا باید اجرا کنید fetchAndLock (زیرا سایر کارگران می توانند همزمان وظایفی را برای مقیاس سازی سیستم دریافت کنند):

  curl 
-H "Content-Type: application/json" 
-X POST 
-d <!-- -->'{"workerId":"worker123","maxTasks":1,"usePriority":true,"topics":[{"topicName": "reserve-car"}, "lockDuration": 10000, "variables": ["someData"]}]}'<!-- --> 
http://localhost:8080/engine-rest/external-task/fetchAndLock

سپس این را به کاموندا بگویید کارگر کار را تمام کرد (توجه داشته باشید که باید شناسه وظیفه خارجی دریافت شده در اولین درخواست را وارد کنید):

  curl 
-H "Content-Type: application/json" 
-X POST 
-d <!-- -->'{"workerId":"worker123", "variables": {}}'<!-- --> 
http://localhost:8080/engine-rest/<!-- -->external-task/EXTERNAL_TASK_ID/complete

همین - شما هنوز به جاوا نیاز ندارید، درست است؟ و همین برای شروع کافی است!

کتابخانه های مشتری

فراخوانی REST API در هر زبان برنامه نویسی آسان است. در جاوا اسکریپت، این کار به راحتی با استفاده از JQuery و در سی شارپ با استفاده از System.Net.Http و Newtonsoft.Json انجام می شود. اما این زمان می برد. بنابراین شما فقط می توانید از تعدادی کتابخانه مشتری استفاده کنید.

در حال حاضر، چندین کتابخانه مشتری آماده در دسترس هستند:

  • جاوا اسکریپت: پیوند. با حمایت کاموندا؛
  • جاوا: پیوند. با حمایت کاموندا؛
  • C #:پیوند и پیوند. هر دوی این پروژه ها در وضعیت متوسط ​​و عملاً غیر فعال هستند، اما می توانند به عنوان نقطه شروع خوبی باشند.
  • PHP: پیوند - خیلی کامل نیست و شامل آخرین تغییرات API نمی شود، اما من پروژه هایی را می شناسم که از آن استفاده می کنند.

به استثنای جاوا اسکریپت و جاوا، کتابخانه های سرویس گیرنده بخشی از خود محصول کاموندا نیستند. انتظار نداشته باشید که آنها از همه ویژگی های REST API کاموندا پشتیبانی کنند. فقط به این دلیل که یک کتابخانه عملکرد خاصی را ارائه نمی دهد به این معنی نیست که وجود ندارد، همیشه REST API کاموندا را بررسی کنید. پروژه های مرجع از کتابخانه ها به عنوان نقطه شروع و الگو استفاده می کنند.

مثال سی شارپ

با استفاده از کتابخانه مشتری فوق، می توانیم به سادگی بنویسیم:

  var camunda = new CamundaEngineClient("http://localhost:8080/engine-rest/engine/default/", null, null);
  // Deploy the BPMN XML file from the resources
  camunda.RepositoryService.Deploy("trip-booking", new List<object> {
        FileParameter.FromManifestResource(Assembly.GetExecutingAssembly(), "FlowingTripBookingSaga.Models.FlowingTripBookingSaga.bpmn")
     });
  
  // Register workers
  registerWorker("reserve-car", externalTask => {
    // here you can do the real thing! Like a sysout :-)
    Console.WriteLine("Reserving car now...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  registerWorker("cancel-car", externalTask => {
    Console.WriteLine("Cancelling car now...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  registerWorker("book-hotel", externalTask => {
    Console.WriteLine("Reserving hotel now...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  // Register more workers...
  
  StartPolling();
  
  string processInstanceId = camunda.BpmnWorkflowService.StartProcessInstance("FlowingTripBookingSaga", new Dictionary<string, object>()
    {
      {"someBookingData", "..." }
    });

کد منبع کاملاً کارآمد را می توان به صورت آنلاین پیدا کرد: پیوند. نمونه دیگر در دسترس است پیوند.

مثال با Node.js

  var Workers = require('camunda-worker-node');
  var workers = Workers('http://localhost:8080/engine-rest', {
    workerId: 'some-worker-id'
  });
  
  workers.registerWorker('reserve-car', [ 'someData' ], function(context, callback) {
    var someNewData = context.variables.someData + " - added something";
    callback(null, {
      variables: {
        someNewData: someNewData
      }
    });
  });
  
  workers.shutdown();

اطلاعات بیشتر را می توان در وب سایت یافت github.com

راه های جایگزین برای راه اندازی کاموندا

تصویر Docker سفارشی با "Camunda standalone WAR"

به عنوان جایگزینی برای تصویر از پیش ساخته شده Docker از کاموندا، می توانید Tomcat را خودتان تهیه کنید (مثلاً بر اساس تصاویر رسمی Docker Tomcat) و سپس Camunda را به عنوان یکی از فایل های به اصطلاح WAR در آن کپی کنید.

استفاده از کاموندا برای ارکستراسیون آسان بر اساس REST و Workflow Engine (بدون جاوا)

اگر نیازهای اضافی زیادی دارید و می توانید یک محیط ساخت جاوا راه اندازی کنید، می توانید جنگ مستقل Camunda را نیز راه اندازی کنید. یک ساخت Maven را مانند این مثال ها تنظیم کنید: build Maven با پیکربندی جنگ یا مونتاژ Maven با روکش.

شروع توزیع کاموندا تامکت

گزینه دیگر این است که به سادگی توزیع Camunda Tomcat را دانلود کرده، آن را از حالت فشرده خارج کرده و اجرا کنید. برای این کار فقط باید Java Runtime Environment (JRE) روی رایانه شما نصب شده باشد. به راحتی می تواند باشد از اینجا دانلود کنید.

استفاده از کاموندا برای ارکستراسیون آسان بر اساس REST و Workflow Engine (بدون جاوا)

برای تغییر پایگاه داده یا انجام هر کار دیگری باید Tomcat را پیکربندی کنید در اسناد شرح داده شده است. می دانم که تامکت ممکن است پیچیده به نظر برسد، اما در واقع بسیار ساده است. و گوگل پاسخ هر چیزی را که ممکن است در این فرآیند مورد نیاز باشد می داند.

اجرای کاموندا با استفاده از تامکت

آخرین گزینه این است که خودتان Tomcat را راه اندازی کنید و کاموندا را در آن نصب کنید. به دنبال توضیحات نصب. این به شما این امکان را می دهد که از هر نسخه ای از تامکت که ترجیح می دهید استفاده کنید یا آن را به عنوان یک سرویس ویندوز نصب کنید.

راه اندازی کاموندا به تولید

معمولاً برای اجرای کاموندا به تنظیمات نهایی نیاز دارد. دستورالعمل‌هایی در کاموندا وجود دارد که این را با جزئیات زیاد توصیف می‌کند، اما من در این مقاله به آنها نمی‌پردازم - فقط یک مثال را نام می‌برم: REST API توزیع به‌طور پیش‌فرض برای احراز هویت پیکربندی نشده است. ممکن است بخواهید این را تغییر دهید.

جمع تا

همانطور که می بینید، صرف نظر از زبانی که استفاده می کنید، شروع کار با کاموندا بسیار آسان است. نکته کلیدی این است که تمام تعاملات از طریق REST API انجام می شود. نصب نیز بسیار آسان است، به خصوص هنگام استفاده از Docker.

منبع: www.habr.com

اضافه کردن نظر