Mwen souvan diskite sou achitekti mikwosèvis ak moun ki pa Java: C#, devlopè Node.JS/JavaScript, oswa fanatik Golang. Yo tout ap fè fas ak lefèt ke yo bezwen yon motè orchestration nan yon achitekti mikwosèvis oswa jis yon zouti pou optimize workflow la ak jwenn kapasite nan lòd, okipe timeouts, Saga ak konpansasyon tranzaksyon yo.
BPM platfòm ak sous louvri soti nan Camunda gwo pou travay sa yo. Zanmitay devlopè se youn nan karakteristik prensipal yo nan pwodwi a. Men, si ou gade nan dokiman li yo, ou ta ka jwenn enpresyon ke amitye Camunda a se sitou ki vize a devlopè Java. Platfòm nan bay anpil opòtinite pou konekte pwòp fonksyon ou ak ekstansyon, men tout bagay fèt nan Java. Eske se vre?
Non! An reyalite, ou ka fasilman kouri Camunda san okenn konesans Java ak konfigirasyon achitekti a nan kòd nan nenpòt lang ou chwazi. Nan atik sa a nou pral gade nan:
achitekti debaz;
REST API;
konsèy sou bibliyotèk kliyan ki egziste deja pou lang ki pa Java;
egzanp lè l sèvi avèk C# ak Node.JS;
fason yo kouri sèvè Camunda (Docker oswa Tomcat).
achitekti
Camunda ekri nan lang Java epi li mande yon Java Virtual Machine (JVM) pou kouri. Camunda bay yon API REST ki pèmèt ou ekri nan nenpòt lang ou renmen epi sèvi ak REST ak Camunda:
Workflows nan Camunda yo defini nan BPMN, ki se fondamantalman yon dosye XML. Li ka modle lè l sèvi avèk Camunda Modeler.
Kouri Camunda atravè yon imaj Docker pre-bati
Fason ki pi fasil pou kouri Camunda se sèvi ak Docker. Fason altènatif pou kouri Camunda yo dekri pita nan atik sa a.
Nan ka sa a, jis kouri:
docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest
Ou pa bezwen enkyete w sou Linux, Java Virtual Machines oswa Tomcats. Dockerfiles ak dokiman debaz yo (pa egzanp, enstriksyon pou konekte ak baz done obligatwa yo) disponib nan Github.
Si ou vle kouri Camunda Enterprise Edition, ou ka fasilman chanje dockerfile.
Sepandan, gen yon sèl dezavantaj nan kouri Camunda lè l sèvi avèk Docker: ou pral fini ak yon vèsyon nan Tomcat ki pa toujou gen ladan yo fikse dènye yo. Pou yon jan kanmenm jwenn alantou sa a, ou ka kreye yon imaj Docker tèt ou ki baze sou distribisyon an Tomcat vle, jan yo montre nan egzanp sa a, oswa itilize youn nan solisyon ki dekri anba a.
Deplwaye yon Modèl Pwosesis
Ann gade nan yon egzanp lè l sèvi avèk modèl la Saga pou yon anrjistreman vwayaj klasik kote ou vle deklanche twa aksyon nan yon ranje ak grasye konpanse aksyon siksè nan ka ta gen yon echèk pita. Prezante nan fòm BPMN, li sanble sa a:
Koulye a, ou ka itilize REST API pou deplwaman modèl pwosesis. Ann di ou te sove li kòm trip.bpmn epi li te kouri Camunda atravè Docker konsa li te disponib sou localhost:8080:
Pwochen kesyon enteresan an se ki jan Camunda deklanche pwosedi tankou anrjistreman yon machin? Camunda ka pa sèlman imedyatman rele sèvis (Pouse-Principe), lè l sèvi avèk kèk bati-an konektè, men tou, mete atik travay nan yon kalite bati-an keu. Lè sa a, travayè a ka resevwa atik travay yo atravè REST, fè travay la, epi rapòte fini bay Camunda (Pull-Principle).
Se konsa, premye ou bezwen fè fetchAndLock (piske lòt travayè yo ka resevwa travay an menm tan pou monte sistèm nan):
Sa a se li - ou pa te bezwen okenn Java jiska prezan, dwa? E sa ase pou kòmanse!
Bibliyotèk Kliyan
Rele REST API a fasil nan nenpòt lang pwogramasyon. Nan JavaScript li bon pou fè sa lè l sèvi avèk JQuery, ak nan C # ou ka itilize System.Net.Http ak Newtonsoft.Json. Men, sa a pral pran tan. Se konsa, ou ka jis itilize kèk bibliyotèk kliyan.
Kounye a gen plizyè bibliyotèk kliyan ki pare ki disponib:
C #:lyen и lyen. Tou de pwojè sa yo nan yon eta entèmedyè epi yo pa gen aktivite nòmalman, men yo ka sèvi kòm yon bon pwen depa;
PHP: lyen se pa yon bibliyotèk trè konplè epi li pa gen ladan dènye chanjman API yo, men mwen konnen pwojè ki sèvi ak li.
Eksepte JavaScript ak Java, bibliyotèk kliyan yo pa fè pati pwodwi Camunda li menm. Pa atann yo sipòte tout karakteristik REST API Camunda a. Jis paske yon bibliyotèk pa bay yon sèten karakteristik sa pa vle di li pa la, toujou tcheke API REST Camunda. Pwojè tipik itilize bibliyotèk kòm yon pwen depa ak modèl.
Egzanp ak C#
Sèvi ak bibliyotèk kliyan ki anwo a, nou ka senpleman ekri:
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", "..." }
});
Ou ka jwenn tout kòd sous k ap travay sou entènèt: lyen. Yon lòt egzanp disponib nan lyen.
Ou ka jwenn plis enfòmasyon sou sit entènèt la github.com
Fason altènatif yo kòmanse Camunda
Custom Docker imaj ak "Camunda standalone WAR"
Kòm yon altènativ a imaj Docker ki te deja bati nan Camunda, ou ka prepare Tomcat tèt ou (pa egzanp, ki baze sou imaj ofisyèl Docker Tomcat yo) ak Lè sa a, kopi Camunda nan li kòm youn nan sa yo rele dosye WAR yo.
Si ou gen anpil kondisyon adisyonèl epi ou ka Customize yon anviwònman bati Java, ou ka tou configured Camunda Standalone lagè. Fikse yon konstriksyon Maven tankou nan egzanp sa yo: bati Maven ak konfigirasyon lagè oswa asanble Maven ak kouvri.
Lanse distribisyon Camunda Tomcat
Yon lòt opsyon se tou senpleman telechaje distribisyon Camunda Tomcat la, dekonprime li epi kouri li. Pou fè sa, ou sèlman bezwen Java Runtime Environment (JRE) enstale sou òdinatè w lan. Li kapab fasil telechaje soti isit la.
Pou chanje baz done a oswa fè nenpòt lòt bagay ou bezwen konfigirasyon Tomcat tankou ki dekri nan dokiman an. Mwen konnen Tomcat ka sanble konplike, men li aktyèlman trè senp. Epi Google gen repons pou tout bagay ou ta ka bezwen nan pwosesis la.
Kouri Camunda lè l sèvi avèk Tomcat
Dènye altènatif la se konfigirasyon Tomcat tèt ou epi enstale Camunda nan li, swiv deskripsyon enstalasyon an. Sa ap ba ou opòtinite pou itilize nenpòt vèsyon Tomcat ou prefere, oswa, pou egzanp, enstale li kòm yon sèvis Windows.
Lanse Camunda nan pwodiksyon an
Tipikman, sa a pral mande pou ou fè kèk konfigirasyon final pou fè Camunda kouri. Camunda gen direktiv ki dekri sa a an detay, men mwen pa pral manyen yo nan atik sa a - mwen pral jis bay yon egzanp: API REST distribisyon an pa konfigirasyon pou otantifikasyon pa default. Ou ta ka vle chanje sa a.
Adisyon-up
Kòm ou ka remake, kòmanse ak Camunda trè fasil, kèlkeswa lang ou itilize a. Pwen kle a se ke tout kominikasyon fèt atravè API REST la. Enstalasyon tou se byen senp, espesyalman lè w ap itilize Docker.