07.07.2020/XNUMX/XNUMX, lus lus Bernd RΓΌcker: koj puas xav tau ntau tus thwjtim?
Kuv feem ntau tham txog microservice architecture nrog cov neeg tsis yog Java: C#, Node.JS/JavaScript developers, lossis Golang enthusiasts. Tag nrho cov ntawm lawv tau ntsib nrog lub fact tias lawv xav tau ib tug orchestration cav nyob rau hauv ib tug microservice architecture los yog tsuas yog ib lub cuab tam los optimize lub workflow thiab tau txais lub peev xwm los txiav txim, lis timeouts, dabneeg thiab them nyiaj muas noj.
BPM platform nrog qhib qhov chaw los ntawm Camunda zoo heev rau tej hauj lwm ntawd. Kev tsim kho tus phooj ywg yog ib qho ntawm cov yam ntxwv tseem ceeb ntawm cov khoom. Tab sis yog tias koj saib nws cov ntaub ntawv, koj yuav tau txais kev xav tias Camunda tus phooj ywg yog tsom rau Java developers. Lub platform muab ntau txoj hauv kev los txuas koj tus kheej cov haujlwm thiab txuas ntxiv, tab sis nws tau ua tiav hauv Java. Puas yog tiag?
Tsis muaj! Qhov tseeb, koj tuaj yeem khiav Camunda tau yooj yim yam tsis muaj kev paub Java thiab teeb tsa cov qauv rau kev cai hauv txhua hom lus koj xaiv. Hauv tsab xov xwm no peb yuav saib:
Txawm li cas los xij, muaj ib qho downside rau khiav Camunda siv Docker: koj yuav xaus nrog ib tug version ntawm Tomcat uas tsis ib txwm suav nrog qhov tseeb kho. Yuav ua li cas mus txog qhov no, koj tuaj yeem tsim Docker duab koj tus kheej raws li qhov xav tau Tomcat faib, raws li qhia hauv qhov piv txwv no, lossis siv ib qho kev daws teeb meem tau piav qhia hauv qab no.
Deploying tus txheej txheem qauv
Cia peb saib ib qho piv txwv uas siv Saga template rau kev mus ncig ua si classic uas koj xav ua rau peb ua ua ke thiab ua kom zoo dua qub rau kev ua tiav zoo nyob rau hauv rooj plaub ntawm kev ua tsis tiav tom qab. Muab tso rau hauv daim ntawv BPMN, nws zoo li no:
Tam sim no koj tuaj yeem siv REST API rau txheej txheem qauv xa tawm. Cia peb hais tias koj tau cawm nws li trip.bpmn thiab khiav Camunda ntawm Docker yog li nws muaj nyob rau hauv localhost: 8080:
Cov lus nug tseem ceeb tom ntej yog Camunda ua li cas ua cov txheej txheem xws li booking tsheb? Camunda tsis tuaj yeem tsuas yog hu rau cov kev pabcuam tam sim ntawd (Push-Principle), siv qee qhov built-in cov khoom sib txuas, tab sis kuj muab cov khoom ua hauj lwm rau hauv ib hom kab ua ke. Tus neeg ua haujlwm tuaj yeem tau txais cov khoom ua haujlwm ntawm REST, ua haujlwm, thiab tshaj tawm ua tiav rau Camunda (Pull-Principle).
Yog li ua ntej koj yuav tsum ua fetchAndLock (vim lwm tus neeg ua haujlwm tuaj yeem tau txais cov haujlwm tib lub sijhawm los ntsuas qhov system):
C #:txuas ΠΈ txuas. Ob qho tib si ntawm cov haujlwm no yog nyob rau hauv nruab nrab lub xeev thiab tsis muaj kev ua si, tab sis tuaj yeem ua qhov pib zoo;
PHP: txuas tsis yog lub tsev qiv ntawv ua tiav heev thiab tsis suav nrog qhov hloov pauv API tshiab, tab sis kuv paub txog cov haujlwm uas siv nws.
Nrog rau kev zam ntawm JavaScript thiab Java, cov tsev qiv ntawv cov neeg siv khoom tsis yog ib feem ntawm Camunda cov khoom nws tus kheej. Tsis txhob cia siab tias lawv yuav txhawb nqa tag nrho Camunda's REST API nta. Tsuas yog vim lub tsev qiv ntawv tsis muab qee qhov tshwj xeeb tsis txhais tau tias nws tsis nyob ntawd, nco ntsoov xyuas Camunda REST API. Tej yaam num siv cov tsev qiv ntawv los ua qhov pib thiab cov qauv.
Piv txwv nrog C#
Siv lub tsev qiv ntawv cov neeg siv khoom saum toj no, peb tuaj yeem sau yooj yim:
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", "..." }
});