powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / получить ответ от актора в акка
45 сообщений из 45, показаны все 2 страниц
получить ответ от актора в акка
    #40048296
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтото не могу найти api. Вообще дернуть нужно актор чтобы получить данные из него. Есть вот такое

ComletableStage<Object> result = Patterns.ask(actor, message, duration)

в документации все нечетко что за actor, source или target. Если таргет то откуда известен source, а если source (of data) то куда возвращаются данные.

к тому же api для обработки сообщений не подразумевает как данные(result) возвращать или куда. Сигнатура метода

Код: java
1.
2.
3.
4.
5.
6.
class MySourceActor{
    public Behavior<Command> listAll(HereIsMyMessageType message){
        Object result = this.actorInternalState.makeSomeResult();   // куда слать этот резалт если он никуда не возврщается ?
        return Behaviors.same();
    }
}
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048306
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя актор какой-то неправильный. Вот смотри тут как делают
https://doc.akka.io/docs/akka/current/typed/actor-lifecycle.html#creating-actors
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048317
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С актором то вроде все ок. Сделано все по документации к акке. И вроде даже работает.
Непонятно как состыковать акку или превратить вызов актора в computedstage. Т.е. стартануть актор можно, но рельзтата не выдернуть т.к. когда там все закончится неизвестно.

Пока только нашел что чтобы актор прикрутить к текущий спринговой модели то в каждый актор еще нужно и lock передавать чтобы искуственный барьер сделать для получения compltedstage но это как бы от чего старались избавиться в акке.

Грубо говорят вот сервис

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
class SomeService implement Service{

  public CompletedStage<Result> doSomething(final Iterable<In> data){
            processManager.spawn(Calculator.create(data), "processing-" + counter);
            processingManager.tell(Start.class);
            return ...; ?
  }
}



PS. все на java.
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048319
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ощущение что вокруг да около хожу. Не ужто через колбак делать нужно и нет готового API?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
class SomeService implement Service{

  public CompletedStage<Result> doSomething(final Iterable<In> data){
            CompletableFuture<Result> resultFuture = new CompletableFuture<Result>();
            processManager.spawn(Calculator.create(data, resultFuture), "processing-" + counter);
            processingManager.tell(Start.class);
            return resultFuture; 
  }
}


?
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048326
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming,
Тебя асинхронно не устраивает получить событии что ли?
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048327
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming
Ощущение что вокруг да около хожу. Не ужто через колбак делать нужно и нет готового API?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
class SomeService implement Service{

  public CompletedStage<Result> doSomething(final Iterable<In> data){
            CompletableFuture<Result> resultFuture = new CompletableFuture<Result>();
            processManager.spawn(Calculator.create(data, resultFuture), "processing-" + counter);
            processingManager.tell(Start.class);
            return resultFuture; 
  }
}


?

Вообще очень плохая идея использовать акку частично. По опыту, либо на нее полностью переходить либо полностью выкинуть(предпочтительнее)... что у вас за кейс такой хитрый? Акторы без стейта - антипаттерн, кстати.
Пишут вот так можно - но тогда надо тащить scala jars в проект
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
import akka.dispatch.*;
import scala.concurrent.ExecutionContext;
import scala.concurrent.Future;
import scala.concurrent.Await;
import scala.concurrent.Promise;
import akka.util.Timeout;

Timeout timeout = Timeout.create(Duration.ofSeconds(5));
Future<Object> future = Patterns.ask(actor, msg, timeout);
String result = (String) Await.result(future, timeout.duration());
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048358
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
lleming,
Тебя асинхронно не устраивает получить событии что ли?


Устраивает. Вопрос лишь в том как это сделать. Мне не нравится вариант с отправкой ссылки на completablefuture в сообщении чтобы actor делал complete этой future. Во первых это самоделка, и я подозреваю что есть api который позволяет это делать проще.

Я нашел этот api

ComletableStage<Object> result = Patterns.ask(actor, message, duration)

но не понимаю как он работает поскольку он не работает и по смыслу он бесмысленный по причинам вначале поста

Документация очень слабая и пока получить стейт актора вне системы акка не получается.
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048361
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что тут неясного? ты говоришь актору вот объект (мессадж) вот ты актор. дай мне результат.

он тебе возвращает футуру результата.

футура это обещание результата а не сам результат. может он будет а может и не будет. и дальше ты уже с этим обещанием делаешь что то.
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048362
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник
lleming
Ощущение что вокруг да около хожу. Не ужто через колбак делать нужно и нет готового API?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
class SomeService implement Service{

  public CompletedStage<Result> doSomething(final Iterable<In> data){
            CompletableFuture<Result> resultFuture = new CompletableFuture<Result>();
            processManager.spawn(Calculator.create(data, resultFuture), "processing-" + counter);
            processingManager.tell(Start.class);
            return resultFuture; 
  }
}


?

Вообще очень плохая идея использовать акку частично. По опыту, либо на нее полностью переходить либо полностью выкинуть(предпочтительнее)... что у вас за кейс такой хитрый?

пока такое же впечатление но у меня опыт всего неделя поэтому ощущение может быть(и скорее всего) обманчиво.
забыл ник

Акторы без стейта - антипаттерн, кстати.

там мне и нужно снапшот стейта актора получить но не из акка системы а скажем по http запрос приходит узнать как там дела.
забыл ник

Пишут вот так можно - но тогда надо тащить scala jars в проект
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
import akka.dispatch.*;
import scala.concurrent.ExecutionContext;
import scala.concurrent.Future;
import scala.concurrent.Await;
import scala.concurrent.Promise;
import akka.util.Timeout;

Timeout timeout = Timeout.create(Duration.ofSeconds(5));
Future<Object> future = Patterns.ask(actor, msg, timeout);
String result = (String) Await.result(future, timeout.duration());



там у меня тот же самый пример вначале поста. К сожалению в документации не отразили как это можно применить, поскольку это даже не скомпилируется в том виде как указано в javadoc, да и здравому смыслу противоречит.
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048367
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
что тут неясного? ты говоришь актору вот объект (мессадж) вот ты актор. дай мне результат.

он тебе возвращает футуру результата.

футура это обещание результата а не сам результат. может он будет а может и не будет. и дальше ты уже с этим обещанием делаешь что то.


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
class MyActor extednds AbstractBehanvior<Command>{
   private Result computeResult(){
      var snapshot = snapshotActorState();
       return snapshot;
   }

   private Behavior<Command> onGetState(final GetState state){
           Result result = computeREsult();  //куда это передавать? Это мертвый код будет выпилен еще компилятором 
           return Behaviors.same();
   }
}


class SomeController {
   public CompleteStage<Result> getProcessManagerState(){
           return Pattersn.ask(actor, msg, duration); 
            // -> как акка знает что нужно вызвать метода computeResult ? В нем нет сообщения чтобы по типу определить что нужно вызывать его, этот метод никуда не привязан ни к какому соощению.
   }
}
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048370
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В первом посту ты захотел из актора как из функции получить результат. Актор скорее всего так не работает.
Его юзкейс предполагает что он либо пошлет парочку месседжей либо создаст парочку новых акторов.

Если тебе нужно узнать "как там дела" - то это скорее всего называется мониторинг. И это (возможно)
описано здесь https://doc.akka.io/docs/akka/2.5/general/supervision.html

Насколько я понимаю философию акторного программирования - зависнувшие надолго (!) акторы просто
убиваются по линии принятия решения выше. Кто там сверху? Охранник. Guardian. И потом стек рестартует.
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048373
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
В первом посту ты захотел из актора как из функции получить результат. Актор скорее всего так не работает.
Его юзкейс предполагает что он либо пошлет парочку месседжей либо создаст парочку новых акторов.

Если тебе нужно узнать "как там дела" - то это скорее всего называется мониторинг. И это (возможно)
описано здесь https://doc.akka.io/docs/akka/2.5/general/supervision.html

Насколько я понимаю философию акторного программирования - зависнувшие надолго (!) акторы просто
убиваются по линии принятия решения выше. Кто там сверху? Охранник. Guardian. И потом стек рестартует.


Вот такая вот постановка говорит о том что akka не интегрируется с другими фрейворками типа спригбута такое замечание уже было. Т.е отправил сообщение в акку из спригбута и все с концами. Что оно там делает непонятно и результатов не увидеть. Но здравый смысл подсказывает что акка без спригбута разве что только для маргиналов ибо всю обвязку, или щетай переписать спригбут на акторах "невозможно" да и не нужно.

значит есть способы но непонятно как пока.
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048379
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну если у тебя akka работает одтельным процессом - то ты можешь в каком-то конечном шаге
внутри актора дёрнуть http POST на твой SpringBoot и сообщить что дескыть всё "чики-пики".

Но вообще архитектура должна быть по максимуму акторная если ты хочешь достичь каких-то
качеств. Типа там скорости и асинхронизма.

Я думаю что для отладки и диагностики в акке конечно-же есть всякие инструменты. Логгеры там..

Но об идеологии тоже надо думать - иначе зачем вообще Акка?
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048382
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming,
Хмм мм...
Причём тут спринг бут?
Вроде ты запнулся на Hello world акторов.
То есть как они вообще работают.
А потом уже Интеграция ежа с ужом.
Message queue есть?
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048386
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем тебе message queue?

P.S. Большинство вопросов этом форуме лишены контекста.
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048388
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
lleming,
Хмм мм...
Причём тут спринг бут?
Вроде ты запнулся на Hello world акторов.
То есть как они вообще работают.
А потом уже Интеграция ежа с ужом.
Message queue есть?


см первый пост. Как из не актора (сервиса) узнать состояние актора. Не важно какой сервис spring boot, jersy, apache common, quarkus.
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048390
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Ну если у тебя akka работает одтельным процессом - то ты можешь в каком-то конечном шаге
внутри актора дёрнуть http POST на твой SpringBoot и сообщить что дескыть всё "чики-пики".

Но вообще архитектура должна быть по максимуму акторная если ты хочешь достичь каких-то
качеств. Типа там скорости и асинхронизма.

Я думаю что для отладки и диагностики в акке конечно-же есть всякие инструменты. Логгеры там..

Но об идеологии тоже надо думать - иначе зачем вообще Акка?


таще мта есть задачи которые хорошо накладывают на систему акторов. но не все
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048391
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Зачем? То что сабж работает в другой парадигмы. Ты верно сказал, через сообщения
22062814
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048392
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming
PetroNotC Sharp
lleming,
Хмм мм...
Причём тут спринг бут?
Вроде ты запнулся на Hello world акторов.
То есть как они вообще работают.
А потом уже Интеграция ежа с ужом.
Message queue есть?


см первый пост. Как из не актора (сервиса) узнать состояние актора. Не важно какой сервис spring boot, jersy, apache common, quarkus.
ЗАЧЕМ?
В асинхронке нельзя сделать снимок и остановить время.
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048393
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Зачем тебе message queue?

P.S. Большинство вопросов этом форуме лишены контекста.
тогда ТС честно говорит что задача вымышленная.
Целей нет! Или они абстрактные.
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048397
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
mayton,
Зачем? То что сабж работает в другой парадигмы. Ты верно сказал, через сообщения
22062814

Вот тут есть интеграция в JMS системы https://doc.akka.io/docs/alpakka/current/jms/index.html
но это все (IMHO) обвесы которые просто потащут в архитектуру еще и брокер.

Надо тащить брокер чтобы продебажить какой-то пустяк? ХЗ. Яб не тащил.
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048398
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming
mayton
Ну если у тебя akka работает одтельным процессом - то ты можешь в каком-то конечном шаге
внутри актора дёрнуть http POST на твой SpringBoot и сообщить что дескыть всё "чики-пики".

Но вообще архитектура должна быть по максимуму акторная если ты хочешь достичь каких-то
качеств. Типа там скорости и асинхронизма.

Я думаю что для отладки и диагностики в акке конечно-же есть всякие инструменты. Логгеры там..

Но об идеологии тоже надо думать - иначе зачем вообще Акка?


таще мта есть задачи которые хорошо накладывают на систему акторов. но не все
для начала можно без сабжа взять бут 2.4 и добавить reactive
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048400
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
ТС пока молчит и про монитор и про дебаг.
Неужели нельзя добавить в актор пару сообщений дебага?
Странно.
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048401
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
mayton
Зачем тебе message queue?

P.S. Большинство вопросов этом форуме лишены контекста.
тогда ТС честно говорит что задача вымышленная.
Целей нет! Или они абстрактные.

В 15 году я тоже спрашивал про акторы здесь https://www.sql.ru/forum/1179895/chetvergovye-aktory
Просто акторы в какой-то момент из баззворда стали пунктом в вакансиях и я заинтересовался.
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048402
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming
PetroNotC Sharp
lleming,
Хмм мм...
Причём тут спринг бут?
Вроде ты запнулся на Hello world акторов.
То есть как они вообще работают.
А потом уже Интеграция ежа с ужом.
Message queue есть?


см первый пост. Как из не актора (сервиса) узнать состояние актора. Не важно какой сервис spring boot, jersy, apache common, quarkus.
подписаться на его сообщения в отладочном режиме?
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048405
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
lleming
пропущено...


см первый пост. Как из не актора (сервиса) узнать состояние актора. Не важно какой сервис spring boot, jersy, apache common, quarkus.
ЗАЧЕМ?
В асинхронке нельзя сделать снимок и остановить время.


Легко, просто нужно попросить. Причем здесь остановка времени возьми CopyOnWriteArrayList. Как бд работают хоть и запросы ассинхронно едут.

чет не могу понять при чем здесь остановить время. Я про конкретный api спрашиваю. Вот тебе без оставноки времени и message queueu.


Код: java
1.
2.
3.
4.
5.
6.
7.
  class MyActor extends AbstractBehanvior<Command>{

             public Behanvio<Command> snapshot(SnapshotCommand value){
                  value.future.comlete(snapshot());
                  return Behanviors.same();
             }
  }


done.
Ничего не надо останавливать. Но тут руками все управляется нужно правильно выделить и убить future т.е. свой велосипед писать.
Вот еще реализация.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
            class MyActorManager extends AbstractBehanvior<Command>{

              public MyActorManager<ActionContext context, SnapshotReplayTo ref){....}

             public Behanvio<Command> snapshot(SnapshotCommand value){
                  snapshotRefReplyTo.tell(snapshot()); 
                  return Behanviors.same();
             }
  }



тоже никаких очередей и остановок времени.

Но это тоже велосипед ибо придется на каждый чих всятвлять replyTo акторы.
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048407
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
mayton,
ТС пока молчит и про монитор и про дебаг.
Неужели нельзя добавить в актор пару сообщений дебага?
Странно.


куда вставить месье? API еще нет непонятно как вызвать этот метод да так чтобы скомпилирвоался код а точку уже ставить хочешь?
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048410
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming,
Давай начнём с теории и потом к практике. Акка не имеет глобальной консистентности данных. Согласен?
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048413
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как ни странно - https://doc.akka.io/docs/akka/current/logging.html

Или отладчик. Но я-бы не пользовался отладчиком. КМК он убийственно подействует на эти супервизоры.
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048416
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming
PetroNotC Sharp
mayton,
ТС пока молчит и про монитор и про дебаг.
Неужели нельзя добавить в актор пару сообщений дебага?
Странно.


куда вставить месье? API еще нет непонятно как вызвать этот метод да так чтобы скомпилирвоался код а точку уже ставить хочешь?
я имел ввиду так:
1 привет мир на акторах
2 ловить сообщения штатные акторов
3 добавить в актор до сообщения
4 ловить их тоже.
Какой пункт непонятен?
Это логирование а не Пошаговая.
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048419
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
lleming,
Давай начнём с теории и потом к практике. Акка не имеет глобальной консистентности данных. Согласен?


Дискутировать не хочется абстрактно ни к чему это не приведет. Я привел пару "грязных" примеров решающих мою проблему. Но суть в том что решения не идеальные и хочется общего подхода.

Patterns.ask(actor, msg, duration); как сделать так чтобы это заработало и все, весь вопрос.
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048423
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
lleming
пропущено...


куда вставить месье? API еще нет непонятно как вызвать этот метод да так чтобы скомпилирвоался код а точку уже ставить хочешь?
я имел ввиду так:
1 привет мир на акторах
2 ловить сообщения штатные акторов
3 добавить в актор до сообщения
4 ловить их тоже.
Какой пункт непонятен?
Это логирование а не Пошаговая.


уж все давно готово.
так что делать с Patterns.ask(actor, msg, duration) ?
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048424
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming
mayton
В первом посту ты захотел из актора как из функции получить результат. Актор скорее всего так не работает.
Его юзкейс предполагает что он либо пошлет парочку месседжей либо создаст парочку новых акторов.

Если тебе нужно узнать "как там дела" - то это скорее всего называется мониторинг. И это (возможно)
описано здесь https://doc.akka.io/docs/akka/2.5/general/supervision.html

Насколько я понимаю философию акторного программирования - зависнувшие надолго (!) акторы просто
убиваются по линии принятия решения выше. Кто там сверху? Охранник. Guardian. И потом стек рестартует.


Вот такая вот постановка говорит о том что akka не интегрируется с другими фрейворками типа спригбута такое замечание уже было. Т.е отправил сообщение в акку из спригбута и все с концами. Что оно там делает непонятно и результатов не увидеть. Но здравый смысл подсказывает что акка без спригбута разве что только для маргиналов ибо всю обвязку, или щетай переписать спригбут на акторах "невозможно" да и не нужно.

значит есть способы но непонятно как пока.

способы то есть.

послать сообщение, ждать пока оно будет отработано, все это время висеть

НО т.к. акка не гарантирует доставку (и обработку) сообщения, в высоконагруженных системах вполне реально получить и бутылочные горлышки (например закончились HTTP потоки на сервере) и зависшие потоки которые ждуть обработки умерших сообщений и т.д. Т.ч. система начинает обрастать guardian'ами и всеким прочим велосипедами со страшной силой.

IMHO & AFAIK

lleming

см первый пост. Как из не актора (сервиса) узнать состояние актора. Не важно какой сервис spring boot, jersy, apache common, quarkus.

IMHO

В общем случае на гарантированный момент времени - никак. Или нужно городить велосипеды.

lleming

чет не могу понять при чем здесь остановить время

Разные акторы могут работать в разных потоках.
pure-java код и акторы - точно в разных
В тот момент, когда ты получил состояние актора, у актора это состояние может уже поменяться.

Или нужны велосипеды

IMHO
lleming

возьми CopyOnWriteArrayList

CopyOnWrite тебе не дает "состояние". Он как раз и дает копию на какой-то момент в прошлом, без гарантии, что это состояние не поменялось.

Еще хуже, если тебе хочется/нужно согласованное состояние нескольких акторов. Пока ты будешь опрашивать один актор, состояние соседних может поменяться.

IMHO

Note : На самом деле тут ОЧЕНЬ МАЛО людей которые ЗНАЮТ AKKA. Некоторые возможно с ней сталкивались на реальных проектах (например я где-то 3-4 месяца), некоторые игрались/читали книжки. Но это не есть знания. Например у меня, тот опыт который был на реальном проекте, скорее был опыт как не надо делать. И к моменту, когда я пришел на проект, АККА медленно но верно все больше заменялась велосипедами
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048431
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming
PetroNotC Sharp
lleming,
Давай начнём с теории и потом к практике. Акка не имеет глобальной консистентности данных. Согласен?


Дискутировать не хочется абстрактно ни к чему это не приведет. Я привел пару "грязных" примеров решающих мою проблему. Но суть в том что решения не идеальные и хочется общего подхода.

Patterns.ask(actor, msg, duration); как сделать так чтобы это заработало и все, весь вопрос.

Ему 4 чела говорят что задача странная. А он - дискутировать не хочу)))
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048438
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну чтото в этом роде там я предполагаю

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
class MyActor extends AbstractBehavior<Comamnd>{

}

//это динамическипй актор создаваемый при вызове Patterns.ask
class DynamicActor extends Behavior{
   private final ComputableFuture<Object> future;

   public void consume(final Object result){
             future.complete(result);
   }
}

Patterns.ask(actor, msg, duration) по сути

public CompletedStage<Object> ask(actor, msg, duration){
           CompletatedStage<Object> future = new CompletableFuture();
           replyTo = AkksSystem.spawn(DynamicActor.create(future)); // what ever internal manager of dynamic actors for reply, pooled or not
           actor.tell(new InternalMsg(msg)); //вызов к обвязке ну например к какомуто методу из AbstractBehavior который уже знает что нужно replyTo сделать в конце, остается дело за малым получить результат
            //и здесь непонятно откуда акка знает какой именно метод нужно вызвать поскольку msg тип она знает и может вызвать 
            // actor.myMethod(msg) по типу сообщения, но этот метод не возвращает результат 

}
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048445
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming,
Найди демку с ask
Future<Object> ask = Patterns.ask(ActorRef/ActorSelection, Object, timeout)
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048447
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming,
Вот это позволяет снимки состояний
Agent<Config> agent = Agent.create(new Config(), getContext())
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048453
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
lleming,
Найди демку с ask
Future<Object> ask = Patterns.ask(ActorRef/ActorSelection, Object, timeout)


я с самого начала про это и говорю.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
class MyActor extends AbstractBehavior{
   interface Command{}
   interface SomeMessage implements Command{ INSTANCE}
   public Behavir<Command> someMessage(SomeMessage ref){
          System.out.println("Dru lalal");
   }
}

Future<Object> future = Patterns.ask(myActor, SomeMessage.INSTANCE, Duration.ofMillis(10000));



что здесь будет в Object ? Демок нет есть утверждения в javadoc что это работает.
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048458
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А долго еще мы будем бросаться огрызками кода? Может собрать какое-то подобие проекта?
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048462
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming,
Обьект String не работает?
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048465
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming,
Почему нельзя отправить строку а не свой навороченный объект чтобы всех запутать?
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048469
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
lleming,
Обьект String не работает?


пока не удалось даже скомпилировать, нужна какая то сигнатура но непонятно какая javadoc тоже молчит
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048470
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming, какую ошибку выдает компиллятор?
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048472
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming,

Future<String> future = Patterns.ask(myActor, "писец" , Duration.ofMillis(10000));
...
Рейтинг: 0 / 0
получить ответ от актора в акка
    #40048490
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
can't resolve method ask

чорт, не обратил внимания изза простой ошибки. Из за того что сразу оба импортируются и имена синхронизиованы большей частью в разных пакетах. Ну по типу akka.types.Behaviors новое типа type safe api dsl, а есть "старое/классическое" они идут в паре типа
com.akka.Behavior и есть com.akka.typed.Behavior и я привык что они в паре идут и нужно просто имя пакета проверять и этого достаточно.


А тут оказалось нестандартно.
я пользовался com.akka.Patterns это из стандартного а из нового нужно было com.actor.typed.javadsl.AskPattern.

ну из плюсов я угадал как работает под капотом из callback акторов.
Всем спасибо
...
Рейтинг: 0 / 0
45 сообщений из 45, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / получить ответ от актора в акка
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]