REST ve İş Akışı Motoruna dayalı (Java yok) kolay düzenleme için Camunda'yı kullanma

Ey Habr! Makalenin çevirisini dikkatinize sunuyorum. “Camdanda'yı kullanımı kolay REST tabanlı bir düzenleme ve iş akışı motoru olarak kullanın (Java'ya dokunmadan)” Bernd Rücker'in yazısı.

07.07.2020/XNUMX/XNUMX, çeviri makaleler Bernd Rücker

REST ve İş Akışı Motoruna dayalı (Java yok) kolay düzenleme için Camunda'yı kullanma

Mikro hizmet mimarisini Java dışından kişilerle sıklıkla tartışırım: C#, Node.JS/JavaScript geliştiricileri veya Golang meraklıları. Hepsi, bir mikro hizmet mimarisinde bir orkestrasyon motoruna veya iş akışını optimize etmek ve sipariş verme, zaman aşımlarını yönetme, Saga ve telafi edici işlemleri yönetme yeteneğini kazanmak için yalnızca bir araca ihtiyaç duydukları gerçeğiyle karşı karşıyadır.

BPM platformu Camunda'dan açık kaynak bu tür görevler için harika. Geliştirici dostu olması ürünün temel özelliklerinden biridir. Ancak belgelerine bakarsanız, Camunda'nın kullanıcı dostu olmasının esas olarak Java geliştiricilerine yönelik olduğu izlenimini edinebilirsiniz. Platform, kendi işlevlerinizi ve uzantılarınızı bağlamak için birçok fırsat sunar, ancak bunların tümü Java'da yapılır. Gerçekten mi?

HAYIR! Aslında Camunda'yı herhangi bir Java bilgisi olmadan kolayca çalıştırabilir ve mimariyi istediğiniz dilde kod yazacak şekilde yapılandırabilirsiniz. Bu yazıda şunlara bakacağız:

  • temel mimari;
  • REST API'si;
  • Java dışındaki diller için mevcut istemci kitaplıkları hakkında tavsiyeler;
  • C# ve Node.JS kullanma örneği;
  • Camunda sunucusunu çalıştırmanın yolları (Docker veya Tomcat).

Mimari

Camunda Java ile yazılmıştır ve çalışması için bir Java Sanal Makinesi (JVM) gerekir. Camunda, istediğiniz dilde yazmanıza ve REST'i Camunda ile kullanmanıza olanak tanıyan bir REST API sağlar:

REST ve İş Akışı Motoruna dayalı (Java yok) kolay düzenleme için Camunda'yı kullanma

Camunda'daki iş akışları, temelde bir XML dosyası olan BPMN'de tanımlanır. kullanılarak modellenebilir. Camunda Modelleyici.

Camunda'yı önceden oluşturulmuş bir Docker görüntüsü aracılığıyla çalıştırma

Camunda'yı çalıştırmanın en kolay yolu Docker'ı kullanmaktır. Camunda'yı çalıştırmanın alternatif yolları bu makalenin ilerleyen kısımlarında anlatılacaktır.

REST ve İş Akışı Motoruna dayalı (Java yok) kolay düzenleme için Camunda'yı kullanma

Bu durumda şunu çalıştırın:

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

Linux, Java Sanal Makineleri veya Tomcats hakkında endişelenmenize gerek yok. Docker dosyaları ve temel belgeler (örneğin, gerekli veritabanlarına bağlanma talimatları) şu adreste mevcuttur: Github.

Camunda Enterprise Edition'ı çalıştırmak istiyorsanız kolayca değiştirebilirsiniz. Dockerfile.

Ancak Camunda'yı Docker kullanarak çalıştırmanın bir dezavantajı var: Tomcat'in her zaman en son düzeltmeleri içermeyen bir sürümüyle karşılaşacaksınız. Bu sorunu bir şekilde aşmak için, bu örnekte gösterildiği gibi istediğiniz Tomcat dağıtımına göre kendiniz bir Docker görüntüsü oluşturabilir veya aşağıda açıklanan çözümlerden birini kullanabilirsiniz.

Süreç Modelini Dağıtma

Art arda üç eylemi tetiklemek ve daha sonraki bir başarısızlık durumunda başarılı eylemleri zarif bir şekilde telafi etmek istediğiniz klasik bir seyahat rezervasyonu için Saga şablonunu kullanan bir örneğe bakalım. BPMN formunda sunulduğunda şuna benzer:

REST ve İş Akışı Motoruna dayalı (Java yok) kolay düzenleme için Camunda'yı kullanma

Şimdi kullanabilirsiniz Süreç modeli dağıtımı için REST API. Diyelim ki bunu trip.bpmn olarak kaydettiniz ve Camunda'yı Docker aracılığıyla çalıştırdınız, böylece localhost:8080'de mevcut oldu:

  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

Artık koşabilirsin yeni iş akışı örnekleri REST API'yi kullanarak ve iş akışı örneği değişkenleri olarak görmek istediğiniz verileri ileterek:

  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

Bir sonraki ilginç soru, Camunda'nın araba rezervasyonu gibi prosedürleri nasıl tetiklediğidir? Camunda, bazı yerleşik özellikleri kullanarak yalnızca hizmetleri (Push-Principle) hemen arayamaz. konnektörler, ancak aynı zamanda iş öğelerini bir tür yerleşik kuyruğa da koyun. Çalışan daha sonra REST aracılığıyla iş öğelerini alabilir, işi gerçekleştirebilir ve tamamlandığını Camunda'ya bildirebilir (Çekme Prensibi).

REST ve İş Akışı Motoruna dayalı (Java yok) kolay düzenleme için Camunda'yı kullanma

Yani önce yapmanız gereken fetchAndLock (diğer çalışanlar sistemi ölçeklendirmek için aynı anda görev alabildiğinden):

  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

O zaman Camunda'ya şunu söyle: işçi işini tamamladı (ilk istekte alınan harici görev kimliğini girmeniz gerektiğini unutmayın):

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

İşte bu; şu ana kadar herhangi bir Java'ya ihtiyacınız olmadı, değil mi? Ve bu başlamak için yeterli!

İstemci Kitaplıkları

REST API'yi çağırmak herhangi bir programlama dilinde kolaydır. JavaScript'te bunu JQuery kullanarak yapmak uygundur ve C#'ta System.Net.Http ve Newtonsoft.Json'u kullanabilirsiniz. Ancak bu zaman alacaktır. Yani sadece bazı istemci kütüphanelerini kullanabilirsiniz.

Şu anda birkaç hazır istemci kütüphanesi mevcuttur:

  • JavaScript: bağlantı. Camunda tarafından desteklenen;
  • Java: bağlantı. Camunda tarafından desteklenen;
  • C #:bağlantı и bağlantı. Bu projelerin her ikisi de orta düzeydedir ve neredeyse hiçbir faaliyeti yoktur ancak iyi bir başlangıç ​​noktası olarak hizmet edebilir;
  • PHP: bağlantı tam bir kütüphane değil ve en son API değişikliklerini içermiyor, ancak onu kullanan projeleri biliyorum.

JavaScript ve Java haricinde istemci kitaplıkları Camunda ürününün parçası değildir. Camunda'nın REST API özelliklerinin tamamını desteklemelerini beklemeyin. Bir kitaplığın belirli bir özelliği sağlamaması, orada olmadığı anlamına gelmez; her zaman Camunda REST API'sini kontrol edin. Tipik projeler kitaplıkları başlangıç ​​noktası ve şablon olarak kullanır.

C# ile örnek

Yukarıdaki istemci kütüphanesini kullanarak şunu yazabiliriz:

  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", "..." }
    });

Tam çalışan kaynak kodu çevrimiçi olarak bulunabilir: bağlantı. Başka bir örnek şu adreste mevcuttur: bağlantı.

Node.js ile örnek

  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();

Daha fazla bilgiyi web sitesinde bulabilirsiniz github.com

Camunda'yı başlatmanın alternatif yolları

"Camunda bağımsız WAR" içeren özel Docker görüntüsü

Camunda'nın önceden oluşturulmuş Docker görüntüsüne alternatif olarak Tomcat'i kendiniz hazırlayabilir (örneğin, resmi Docker Tomcat görüntülerine dayanarak) ve ardından Camunda'yı WAR dosyalarından biri olarak ona kopyalayabilirsiniz.

REST ve İş Akışı Motoruna dayalı (Java yok) kolay düzenleme için Camunda'yı kullanma

Çok sayıda ek gereksiniminiz varsa ve bir Java oluşturma ortamını özelleştirebiliyorsanız, Camunda Standalone war'ı da yapılandırabilirsiniz. Bu örneklerde olduğu gibi bir Maven yapısı oluşturun: build Savaş konfigürasyonlu Maven veya montaj Kaplamalı Maven.

Camunda Tomcat dağıtımını başlatma

Diğer bir seçenek de Camunda Tomcat dağıtımını indirmek, sıkıştırmasını açmak ve çalıştırmaktır. Bunu yapmak için yalnızca bilgisayarınızda Java Runtime Environment'ın (JRE) kurulu olması gerekir. Kolayca olabilir buradan indir.

REST ve İş Akışı Motoruna dayalı (Java yok) kolay düzenleme için Camunda'yı kullanma

Veritabanını değiştirmek veya başka bir şey yapmak için Tomcat'i aşağıdaki gibi yapılandırmanız gerekir: belgelerde açıklanan. Tomcat'in karmaşık görünebileceğini biliyorum ama aslında çok basit. Ve Google'da bu süreçte ihtiyaç duyabileceğiniz her şeyin yanıtı var.

Camunda'yı Tomcat kullanarak çalıştırma

Son alternatif ise Tomcat'i kendiniz yapılandırıp Camunda'yı içine kurmaktır. kurulum açıklamasını takip ederek. Bu size Tomcat'in tercih ettiğiniz herhangi bir sürümünü kullanma veya örneğin onu bir Windows hizmeti olarak kurma fırsatı verecektir.

Camunda'nın üretime başlatılması

Genellikle bu, Camunda'yı çalıştırmak için son bir kurulum yapmanızı gerektirir. Camunda'da bunu çok ayrıntılı bir şekilde açıklayan yönergeler var, ancak bu makalede bunlara değinmeyeceğim - yalnızca bir örnek vereceğim: dağıtımın REST API'si varsayılan olarak kimlik doğrulama için yapılandırılmamıştır. Bunu değiştirmek isteyebilirsiniz.

Özetleme

Fark etmiş olabileceğiniz gibi, kullandığınız dil ne olursa olsun Camunda'yı kullanmaya başlamak çok kolaydır. Önemli olan tüm iletişimin REST API aracılığıyla yapılmasıdır. Özellikle Docker kullanıldığında kurulumu da oldukça basittir.

Kaynak: habr.com

Yorum ekle