Sawubona, Habr! Ngethula ekunakeni kwakho ukuhunyushwa kwalesi sihloko
07.07.2020/XNUMX/XNUMX, ukuhumusha
Ngivame ukuxoxa ngezakhiwo ze-microservice nabantu okungebona abe-Java: C#, Node.JS/JavaScript onjiniyela, noma abathanda i-Golang. Bonke babhekene neqiniso lokuthi badinga injini ye-orchestration ekwakhiweni kwe-microservice noma ithuluzi nje lokuthuthukisa ukuhamba komsebenzi futhi bathole ikhono loku-oda, ukuphatha isikhathi, i-Saga kanye nokunxeshezelwa kokwenziwe.
Inkundla ye-BPM nge
Cha! Eqinisweni, ungakwazi ukusebenzisa i-Camunda kalula ngaphandle kolwazi lwe-Java futhi ulungiselele ukwakheka ukuze ikhodi nganoma yiluphi ulimi oluthandayo. Kulesi sihloko sizobheka:
- izakhiwo eziyisisekelo;
- I-REST API;
- iseluleko kumitapo yolwazi yamaklayenti ekhona kwezinye izilimi ngaphandle kwe-Java;
- isibonelo sokusebenzisa i-C# ne-Node.JS;
- Izindlela zokusebenzisa iseva ye-Camunda (i-Docker noma i-Tomcat).
bokwakha
I-Camunda ibhalwe nge-Java futhi idinga umshini we-Java Virtual (JVM) ukuze isebenze. I-Camunda inikeza i-REST API ekuvumela ukuthi ubhale nganoma yiluphi ulimi oluthandayo futhi usebenzise i-REST nge-Camunda:
Ukugeleza komsebenzi ku-Camunda kuchazwa nge-BPMN, okuyifayela le-XML. Kungenziwa imodeli ngokusebenzisa
Isebenzisa i-Camunda ngesithombe se-Docker esakhiwe ngaphambilini
Indlela elula yokusebenzisa i-Camunda ukusebenzisa i-Docker. Ezinye izindlela zokusebenzisa i-Camunda zichazwe kamuva kulesi sihloko.
Kulesi simo, vele ugijime:
docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest
Awudingi ukukhathazeka nge-Linux, i-Java Virtual Machines noma i-Tomcats. Ama-Dockerfiles kanye nemibhalo eyisisekelo (isibonelo, imiyalelo yokuxhuma kusizindalwazi esidingekayo) kuyatholakala kokuthi
Uma ufuna ukusebenzisa i-Camunda Enterprise Edition, ungashintsha kalula
Kodwa-ke, kunohlangothi olulodwa lokusebenzisa i-Camunda usebenzisa i-Docker: uzogcina unenguqulo ye-Tomcat engafaki njalo ukulungiswa kwakamuva. Ukuzungeza lokhu ngandlela thile, ungazakhela ngokwakho isithombe se-Docker ngokusekelwe ekusabalaliseni kwe-Tomcat oyifunayo, njengoba kukhonjisiwe kulesi sibonelo, noma usebenzise esinye sezixazululo ezichazwe ngezansi.
Kusetshenziswa Imodeli Yenqubo
Ake sibheke isibonelo sisebenzisa isifanekiso se-Saga sokubhuka kohambo lwakudala lapho ufuna ukuqalisa khona izenzo ezintathu zilandelana futhi unxephezele ngomusa izenzo eziyimpumelelo uma kwenzeka ukwehluleka kamuva. Kwethulwa ngefomu le-BPMN, libukeka kanje:
Manje ungasebenzisa
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
Manje ungagijima
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
Umbuzo olandelayo othokozisayo ngothi uCamunda uziqalisa kanjani izinqubo ezifana nokubhuka imoto? I-Camunda ayikwazi nje ukushayela ngokushesha izinsizakalo (Push-Principle), isebenzisa okunye okwakhelwe ngaphakathi
Ngakho okokuqala udinga ukwenza
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
Bese utshela uCamunda lokho
curl
-H "Content-Type: application/json"
-X POST
-d <!-- -->'{"workerId":"worker123", "variables": {}}'<!-- -->
http://localhost:8080/engine-rest/<!-- -->external-task/EXTERNAL_TASK_ID/complete
Yilokho - awukakadingi i-Java kuze kube manje, akunjalo? Futhi lokho kwanele ukuqalisa!
Imitapo yolwazi yeklayenti
Ukushayela i-REST API kulula kunoma yiluphi ulimi lokuhlela. Ku-JavaScript kulula ukwenza lokhu usebenzisa i-JQuery, futhi ku-C# ungasebenzisa i-System.Net.Http kanye ne-Newtonsoft.Json. Kodwa lokhu kuzothatha isikhathi. Ngakho ungasebenzisa umtapo wolwazi weklayenti.
Kukhona amalabhulali amaklayenti amaningi enziwe ngomumo atholakalayo:
- IJavaScript:
isixhumanisi . Isekelwe nguCamunda; - IJava:
isixhumanisi . Isekelwe nguCamunda; - C #:
isixhumanisi иisixhumanisi . Womabili la maphrojekthi asesimweni esimaphakathi futhi awekho nhlobo umsebenzi, kodwa angasebenza njengesiqalo esihle; - I-PHP:
isixhumanisi ayiwona umtapo wolwazi ophelele kakhulu futhi ayifaki izinguquko zakamuva ze-API, kodwa ngiyazi ngamaphrojekthi ayisebenzisayo.
Ngaphandle kweJavaScript neJava, imitapo yolwazi yamaklayenti ayiyona ingxenye yomkhiqizo weCamunda ngokwawo. Ungalindeli ukuthi basekele zonke izici ze-Camunda's REST API. Ngenxa yokuthi umtapo wolwazi awunikezi isici esithile akusho ukuthi asikho, hlala uhlola i-Camunda REST API. Amaphrojekthi ajwayelekile asebenzisa imitapo yolwazi njengesiqalo nesifanekiso.
Isibonelo nge-C#
Sisebenzisa umtapo wolwazi weklayenti ongenhla, singavele sibhale:
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", "..." }
});
Ikhodi egcwele yomthombo osebenzayo ingatholakala ku-inthanethi:
Isibonelo nge-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();
Imininingwane engaphezulu ingatholakala kuwebhusayithi.
Ezinye izindlela zokuqalisa i-Camunda
Isithombe se-Custom Docker esine-"Camunda standalone WAR"
Njengenye indlela yesithombe esakhiwe ngaphambili se-Docker esivela ku-Camunda, ungazilungiselela i-Tomcat ngokwakho (ngokwesibonelo, ngokusekelwe ezithombeni ezisemthethweni ze-Docker Tomcat) bese ukopisha i-Camunda kuyo njengenye yamafayela okuthiwa yi-WAR.
Uma unezidingo eziningi ezengeziwe futhi ungenza ngendlela oyifisayo indawo yokwakha ye-Java, ungaphinda ulungiselele impi ye-Camunda Standalone. Setha i-Maven build njengalezi zibonelo: ukwakha
Iqalisa ukusatshalaliswa kwe-Camunda Tomcat
Enye inketho ukumane ulande ukusatshalaliswa kweCamunda Tomcat, uyivule bese uyiqhuba. Ukuze wenze lokhu, udinga kuphela i-Java Runtime Environment (JRE) efakwe kukhompyutha yakho. Kungaba lula
Ukushintsha i-database noma wenze noma yini enye oyidingayo ukuze ulungiselele i-Tomcat efana
Ukugijima i-Camunda usebenzisa i-Tomcat
Enye indlela yokugcina ukulungiselela i-Tomcat ngokwakho bese ufaka i-Camunda kuyo,
Kwethulwa i-Camunda ekukhiqizeni
Ngokuvamile, lokhu kuzodinga ukuthi wenze ukusetha kokugcina ukuze i-Camunda isebenze. I-Camunda ineziqondiso ezichaza lokhu ngokuningiliziwe, kodwa ngeke ngizithinte kulesi sihloko - ngizonikeza isibonelo esisodwa: i-REST API yokusabalalisa ayilungiselelwe ukuqinisekiswa ngokuzenzakalelayo. Ungase ufune ukushintsha lokhu.
Ukufingqa
Njengoba kungenzeka ukuthi ubonile, ukuqalisa ngeCamunda kulula kakhulu, kungakhathalekile ukuthi usebenzisa luphi ulimi. Iphuzu elibalulekile ukuthi konke ukuxhumana kwenziwa nge-REST API. Ukufakwa nakho kulula kakhulu, ikakhulukazi uma usebenzisa i-Docker.
Source: www.habr.com