Ես հաճախ քննարկում եմ միկրոծառայությունների ճարտարապետությունը ոչ Java մարդկանց հետ՝ C# մշակողների, Node.JS/JavaScript մշակողների կամ Golang-ի սիրահարների հետ: Նրանց բոլորին բախվում է այն փաստը, որ նրանց անհրաժեշտ է նվագախմբային մեխանիզմ միկրոսերվիսային ճարտարապետության մեջ, կամ պարզապես գործիք՝ աշխատանքային հոսքը պարզեցնելու և պատվիրելու, ժամանակի դադարեցման, Սագայի և փոխհատուցվող գործարքների կարողություն ձեռք բերելու համար:
BPM հարթակ հետ բաց կոդով Camunda-ից հիանալի է նման առաջադրանքների համար: Մշակողի բարեհամբույր լինելը ապրանքի հիմնական հատկանիշներից մեկն է: Բայց եթե նայեք դրա փաստաթղթերին, կարող եք տպավորություն ստեղծվել, որ Կամունդայի «բարյացակամությունը» հիմնականում ուղղված է Java ծրագրավորողներին: Պլատֆորմը տրամադրում է բազմաթիվ տարբերակներ՝ ձեր սեփական գործառույթներն ու ընդլայնումները միացնելու համար, բայց ամեն ինչ արվում է Java-ում: Իսկապե՞ս։
Ո՛չ։ Փաստորեն, դուք կարող եք հեշտությամբ գործարկել Camunda-ն առանց Java-ի իմացության և կարգավորել կոդերի ճարտարապետությունը ձեր ընտրած ցանկացած լեզվով: Այս հոդվածում մենք կանդրադառնանք.
հիմնական ճարտարապետություն;
REST API
խորհրդատվություն գոյություն ունեցող հաճախորդների գրադարանների վերաբերյալ Java-ից բացի այլ լեզուների համար.
օրինակ՝ օգտագործելով C# և Node.JS;
Camunda սերվերը գործարկելու եղանակներ (Docker կամ Tomcat):
ճարտարապետություն
Camunda-ն գրված է Java-ով և գործարկելու համար անհրաժեշտ է Java վիրտուալ մեքենա (JVM): Camunda-ն տրամադրում է REST API, որը թույլ է տալիս գրել ցանկացած լեզվով, որը ցանկանում եք և օգտագործել REST-ը Camunda-ի հետ.
Camunda-ում աշխատանքային հոսքերը սահմանվում են BPMN-ում, որը հիմնականում XML ֆայլ է: Այն կարելի է մոդելավորել հետ Կամունդա Մոդելեր.
Կամունդայի վարում նախապես կառուցված Docker պատկերի միջոցով
Camunda-ն գործարկելու ամենադյուրին ճանապարհը Docker-ն օգտագործելն է: Camunda-ի գործարկման այլընտրանքային ուղիները նկարագրված են այս հոդվածում ավելի ուշ:
Այս դեպքում պարզապես գործարկեք.
docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest
Պետք չէ անհանգստանալ Linux-ի, JVM-ների կամ Tomcats-ի մասին: Dockerfiles-ը և հիմնական փաստաթղթերը (օրինակ՝ պահանջվող տվյալների բազաներին միանալու հրահանգները) հասանելի են այստեղ Github.
Եթե ցանկանում եք գործարկել Camunda Enterprise Edition-ը, կարող եք հեշտությամբ փոխել dockerfile.
Այնուամենայնիվ, Camunda-ն Docker-ի հետ գործարկելն ունի մեկ բացասական կողմ՝ դուք կհայտնվեք Tomcat-ի տարբերակով, որը միշտ չէ, որ ներառում է վերջին ուղղումները: Սրա շուրջ աշխատելու համար կարող եք ստեղծել ձեր սեփական Docker պատկերը՝ հիմնված Tomcat-ի ցանկալի բաշխման վրա, ինչպես ցույց է տրված այս օրինակում, կամ օգտագործել ստորև նկարագրված լուծումներից մեկը:
Գործընթացի մոդելի տեղակայում
Դիտարկենք օրինակ՝ օգտագործելով Saga ձևանմուշը դասական ուղևորությունների ամրագրման համար, որտեղ դուք ցանկանում եք գործարկել երեք գործողություն անընդմեջ և նրբագեղորեն փոխհատուցել հաջողությամբ կատարված գործողությունները՝ հետագայում ձախողման դեպքում: Ներկայացված BPMN ձևով, այն ունի հետևյալ տեսքը.
Այժմ դուք կարող եք օգտագործել REST API գործընթացի մոդելի տեղակայման համար. Ենթադրենք, դուք այն պահել եք որպես trip.bpmn և գործարկել Camunda-ն Docker-ի միջոցով, որպեսզի այն հասանելի լինի localhost:8080-ում:
Այժմ դուք կարող եք վազել աշխատանքային հոսքի նոր դեպքեր օգտագործելով REST API-ն և փոխանցեք այն տվյալները, որոնք ցանկանում եք տեսնել որպես աշխատանքային հոսքի օրինակի փոփոխականներ.
Հաջորդ հետաքրքիր հարցն այն է, թե ինչպես է Կամունդան անվանում այնպիսի ընթացակարգեր, ինչպիսին է մեքենայի ամրագրումը: Camunda-ն կարող է ոչ միայն անմիջապես զանգահարել ծառայություններ (Push-Principle)՝ օգտագործելով որոշ ներկառուցված միակցիչներ, այլև աշխատանքային իրերը մի տեսակ ներկառուցված կարգի մեջ դնել։ Այնուհետև աշխատողը կարող է REST-ի միջոցով վերցնել աշխատանքային իրերը, կատարել աշխատանքը և ասել Կամունդային, որ ավարտի (Pull-Principle):
Այսպիսով, նախ դուք պետք է կատարեք fetchAndLock (քանի որ մյուս աշխատողները կարող են միաժամանակ առաջադրանքներ ստանալ՝ համակարգը մեծացնելու համար).
Ահա և վերջ. Ձեզ դեռևս ոչ մի Java-ի կարիք չի զգացել, այնպես չէ՞: Եվ դա բավական է սկսելու համար:
Հաճախորդների գրադարաններ
REST API կանչելը հեշտ է ցանկացած ծրագրավորման լեզվով: JavaScript-ում դա հարմար է արվում JQuery-ի միջոցով, իսկ C#-ում՝ System.Net.Http և Newtonsoft.Json-ի միջոցով: Բայց սա ժամանակ կպահանջի: Այսպիսով, դուք կարող եք պարզապես օգտագործել հաճախորդների գրադարանը:
Այս պահին հասանելի են մի քանի պատրաստի հաճախորդների գրադարաններ.
C #:ՈՒղեցույց и ՈՒղեցույց. Այս երկու նախագծերն էլ միջանկյալ վիճակում են և գործնականում քնած վիճակում են, բայց կարող են լավ ելակետ ծառայել.
PHP: ՈՒղեցույց - ոչ շատ ամբողջական և չի ներառում API-ի վերջին փոփոխությունները, բայց ես գիտեմ նախագծեր, որոնք օգտագործում են այն:
Բացառությամբ JavaScript-ի և Java-ի, հաճախորդի գրադարանները բուն Camunda արտադրանքի մաս չեն: Մի ակնկալեք, որ նրանք կաջակցեն Camunda-ի REST API-ի բոլոր հնարավորությունները: Միայն այն պատճառով, որ գրադարանը չի ապահովում որոշակի գործառույթ, չի նշանակում, որ այն այնտեղ չէ, միշտ ստուգեք Camunda-ի REST API-ն: Հղման նախագծերը գրադարաններն օգտագործում են որպես ելակետ և ձևանմուշ:
C# օրինակ
Օգտագործելով վերը նշված հաճախորդի գրադարանը, մենք կարող ենք պարզապես գրել.
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", "..." }
});
Ամբողջովին աշխատող աղբյուրի կոդը կարելի է գտնել առցանց՝ ՈՒղեցույց. Մեկ այլ օրինակ հասանելի է ՈՒղեցույց.
Լրացուցիչ տեղեկություններ կարելի է գտնել կայքում Github.com
Camunda-ի գործարկման այլընտրանքային ուղիներ
Պատվերով Docker պատկեր «Camunda standalone WAR» հետ
Որպես Camunda-ից նախապես կառուցված Docker պատկերի այլընտրանք, դուք կարող եք ինքներդ պատրաստել Tomcat-ը (օրինակ՝ հիմնվելով Docker Tomcat-ի պաշտոնական պատկերների վրա), այնուհետև պատճենել Camunda-ն դրա մեջ՝ որպես այսպես կոչված WAR ֆայլերից մեկը:
Եթե դուք ունեք բազմաթիվ լրացուցիչ պահանջներ և կարող եք ստեղծել Java build միջավայր, կարող եք նաև ստեղծել Camunda Standalone War: Ստեղծեք Maven build, ինչպես այս օրինակներում. build Maven պատերազմի կոնֆիգուրացիայով կամ ժողով Maven հետ Overlay.
Սկսվում է Camunda Tomcat-ի բաշխումը
Մեկ այլ տարբերակ պարզապես ներբեռնելն է Camunda Tomcat-ի բաշխումը, unzip-ը և գործարկել այն: Սա պահանջում է միայն ձեր համակարգչում տեղադրված Java Runtime Environment (JRE): Դա կարող է հեշտությամբ լինել բեռնել այստեղից.
Տվյալների բազան փոխելու կամ որևէ այլ բան անելու համար հարկավոր է կարգավորել Tomcat-ի նմանը նկարագրված է փաստաթղթերում. Ես գիտեմ, որ Tomcat-ը կարող է բարդ թվալ, բայց իրականում դա շատ պարզ է: Եվ Google-ը գիտի այն ամենի պատասխանները, որոնք կարող են պահանջվել գործընթացում:
Վազում Camunda-ն Tomcat-ի միջոցով
Վերջին այլընտրանքն այն է, որ ինքներդ ստեղծեք Tomcat-ը և տեղադրեք Camunda-ն դրա մեջ, հետևելով տեղադրման նկարագրությանը. Սա ձեզ հնարավորություն կտա օգտագործել Tomcat-ի ցանկացած տարբերակը, որը դուք նախընտրում եք, կամ տեղադրել այն որպես Windows ծառայություն, օրինակ:
Camunda-ի թողարկումը արտադրության մեջ
Սա սովորաբար կպահանջի վերջնական կարգավորում՝ Camunda-ն գործարկելու համար: Camunda-ում կան ուղեցույցներ, որոնք նկարագրում են դա շատ մանրամասն, բայց ես չեմ անդրադառնա դրանց այս հոդվածում. ես կնշեմ միայն մեկ օրինակ. բաշխման REST API-ն լռելյայն կազմաձևված չէ նույնականացման համար: Դուք կարող եք փոխել սա:
Ամփոփելով-up
Ինչպես տեսնում եք, Camunda-ի հետ սկսելը շատ հեշտ է, անկախ նրանից, թե որ լեզվից եք օգտագործում: Հիմնական կետն այն է, որ բոլոր փոխազդեցությունները կատարվում են REST API-ի միջոցով: Տեղադրումը նույնպես բավականին հեշտ է, հատկապես Docker-ի օգտագործման ժամանակ: