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:
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.
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:
Ş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:
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).
Yani önce yapmanız gereken fetchAndLock (diğer çalışanlar sistemi ölçeklendirmek için aynı anda görev alabildiğinden):
İş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;
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ı.
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.
Ç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.
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.