Я пишу приложение, которое может получать 2 типа событий, поступающих в систему из разных источников. Я хочу иметь контекст для обработки каждого из них. См. Код ниже:
event MyEvent1{
//stuff for context1
}
event MyEvent2{
//stuff for context2
}
event Cascade{
//PRIORITY stuff for context1 & 2
}
monitor Application{
context parallel1 := context("E1processor");
context parallel2 := context("E2processor");
action onload{
spawn handleE1() to parallel1;
spawn handleE2() to parallel2;
on all MyEvent1() as e {
send e to parallel1;
}
on all MyEvent2() as e {
send e to parallel2;
}
}//onload
action handleE1( ){
on all MyEvent1() as e1 {
//do work, create and route CASCADE event
route Cascade();
//I want to do this!
route Cascade() to parallel2; // < ----- ERROR
}
on all Cascade(){
//URGENT stuff
}
}
action handleE2(){
on all MyEvent2() as e1 {
}
on all Cascade(){
//URGENT stuff
}
}
}//Application
Моя проблема заключается в том, что я хочу, чтобы событие Cascade()
было помещено в начало очереди обработки, потому что это приоритет. Но когда я пытаюсь сделать следующее:
//do work, create and route CASCADE event
route Cascade(); //<--- Works
//I want to do this!
route Cascade() to parallel2; // < ----- ERROR
Это дает мне ошибку - как я могу перенаправить событие в качестве приоритета из одного контекста в другой?
К сожалению, нет возможности отдать приоритет отправке в другой контекст. Ответ может быть более архитектурным по своей природе - можно ли, например, просто выполнить обработку Cascade в основном контексте?