Позвольте мне попытаться объяснить это на примере.
Раздел 1:
Подумайте об этом как об обмене текстовыми сообщениями между двумя людьми (например, A и B ).
Если A получает сообщение от B , то A is the Receiver
и B is the Sender
. Предположим, что если A отправляет сообщение, то A becomes the Sender
, тогда как B becomes Receiver
Итак, отправитель и получатель действительно зависят от направления потока сообщения. Оба будут выступать в качестве отправителя и получателя.
В соответствии с вашим примером ..
ActorRef
, переданный в качестве второго параметра в методе tell()
, указывает, кто отправил сообщение, тогда как ActorRef
метод tell
, который был вызван, является получателем.
Как правило, он Reciever.tell(message, sender)
в обоих местах. Но вы можете обозначить это как Sender.tell(msg, receiver)
как указание на ответ Актеру, который отправил сообщение в первую очередь.
Даже если вы говорите это как Sender.tell(msg, receiver)
, здесь Sender
часть являетсятот, кто собирается получить сообщение, а Receiver
часть - тот, кто фактически отправляет сообщение (отвечая в данном случае).
Попробуйте читать и понимать выше построчно, так как это можеткажется запутанным. Затем продолжите ниже.
Раздел 2:
Теперь, в Reciever.tell(message, sender)
отправитель не всегда должен быть тем, кто отправил сообщение. Это может указывать и на другого актера. Или у него может не быть актера, просто пройдя ActorRef.noSender()
.
Теперь рассмотрим три актера A , B & C ,Если я отправлю сообщение от актера A актеру B, как показано ниже,
B.tell(message, C);
В контексте B, C будет тем, кто отправил сообщение B, хотя A был фактическим отправителем. Итак, когда вы отправляете ответ, как показано ниже,
getSender().tell(replyMsg, getSelf());
Здесь, метод getSender()
будет возвращать ссылку на актера C вместо актора A. Таким образом, актер C получит ответное сообщение.
Если предположить, что субъект А отправил сообщение без ссылки на отправителя, как показано ниже,
B.tell(message, ActorRef.noSender())
Тогда в контексте Б отправителя не будет. Отправитель неизвестен. Предположим, что если B попытается отправить ответ getSender().tell(replyMsg, getSelf())
, то никакие действующие лица (A, B, C) не получат сообщение , но будут доставлены системному действующему субъекту специального типа, известному как deadLetter
actor.