@@ -22,38 +22,47 @@ public class FetcherActor extends AbstractActor {
22
22
private Router broadcastRouter ;
23
23
private Router router ;
24
24
25
+ // Blueprint нашего аткора, то как его следует инстанцировать
25
26
static public Props props () {
26
27
return Props .create (FetcherActor .class , FetcherActor ::new );
27
28
}
28
29
29
30
/**
30
- * Processor for actors system initialization
31
+ * Логика инициалиазции нашей системы
32
+ * Передаем сообщение в котором храниться конфигурация нашей системы
31
33
*
32
34
* @param config initialization config
33
35
*/
34
- private void intializePrinterSystem (FetcherInitMessage config ) {
36
+ private void initializePrinterSystem (FetcherInitMessage config ) {
37
+ // готовим наши "принтеры"
35
38
List <Routee > printerRoutees = new ArrayList <>();
36
39
for (int i = 0 ; i < config .getPrintersCount (); i ++) {
37
40
ActorRef printer = getContext ().actorOf (PrinterActor .props (i ), "printer-" + i );
38
41
getContext ().watch (printer );
39
42
printerRoutees .add (new ActorRefRoutee (printer ));
40
43
}
41
44
45
+ // готовим наши шаблонизаторы
42
46
Router printerRouter = new Router (new RoundRobinRoutingLogic (), printerRoutees );
43
-
44
47
List <Routee > greeterRoutees = new ArrayList <>();
45
48
for (int i = 0 ; i < config .getGreetersCount (); i ++) {
46
49
ActorRef greeter = getContext ().actorOf (GreeterActor .props ("Aloha, %s!!" , printerRouter , i ), "greeter-" + i );
47
50
getContext ().watch (greeter );
48
51
greeterRoutees .add (new ActorRefRoutee (greeter ));
49
52
}
50
53
54
+ // Роутер для распространения конфигурационного сообщения
51
55
broadcastRouter = new Router (new BroadcastRoutingLogic (), greeterRoutees );
56
+
57
+ // Роутер для отправки сообщений предназначенных для шаблонизации и печати
52
58
router = new Router (new RoundRobinRoutingLogic (), greeterRoutees );
53
59
}
54
60
55
61
/**
56
- * Processor for listening for queue
62
+ * Метод прослушивания очереди
63
+ * !! Disclaimer: используется блокирующее API для доступа к RabbitMQ
64
+ * поток, который будет исполнять этот код будет потерян для пула.
65
+ * Но так как такой актор только один, для демонстрационных целей - ничего страшного
57
66
*
58
67
* @param config listening config
59
68
*/
@@ -78,18 +87,18 @@ public void handleDelivery(String consumerTag, Envelope envelope,
78
87
String message = new String (body , "UTF-8" );
79
88
log .info (" [x] Received '" + message + "'" );
80
89
81
- IncomingMessage request = null ;
90
+ QueueIncomingMessage request = null ;
82
91
try {
83
92
ObjectMapper mapper = new ObjectMapper ();
84
- request = mapper .readValue (message , IncomingMessage .class );
93
+ request = mapper .readValue (message , QueueIncomingMessage .class );
85
94
} catch (Exception ex ) {
86
95
log .error (ex , "Unable to parse request." );
87
96
}
88
97
89
98
if (request != null )
90
- if (request .getType ().equals ("welcome" ))
99
+ if (request .getType ().equals (MessagesTypes . WELCOME ))
91
100
router .route (new WelcomeMessage (request .getLoad ()), getSelf ());
92
- else if (request .getType ().equals ("config" ))
101
+ else if (request .getType ().equals (MessagesTypes . CONFIG ))
93
102
broadcastRouter .route (new GreetingConfigMessage (request .getLoad ()), getSelf ());
94
103
else
95
104
log .warning ("Unknown message type" );
@@ -103,12 +112,13 @@ else if (request.getType().equals("config"))
103
112
}
104
113
}
105
114
115
+ // Билдер нашего обраотчика сообщений
106
116
@ Override
107
117
public Receive createReceive () {
108
118
return receiveBuilder ()
109
- .match (FetchStartMessage .class , this ::listen )
110
- .match (FetcherInitMessage .class , this ::intializePrinterSystem )
111
- .matchAny (o -> log .info ("received unknown message" ))
119
+ .match (FetchStartMessage .class , this ::listen ) // Обработчик сообщения начала процесса прослушивания заданий на печать
120
+ .match (FetcherInitMessage .class , this ::initializePrinterSystem ) // Обработчик сообщения инициализации системы
121
+ .matchAny (o -> log .info ("received unknown message" )) // Обработчик неизвестного сообщения
112
122
.build ();
113
123
}
114
124
}
0 commit comments