Megosztás a következőn keresztül:


Aktoresemények

Az aktoresemények lehetőséget nyújtanak arra, hogy az aktortól a lehető leghatékonyabb értesítéseket küldjék az ügyfeleknek. Az aktoreseményeket az aktorok közötti kommunikációhoz tervezték, és nem használhatók aktorok közötti kommunikációhoz.

Az alábbi kódrészletek bemutatják, hogyan használhatja az aktoreseményeket az alkalmazásban.

Definiáljon egy felületet, amely leírja az aktor által közzétett eseményeket. Ezt az interfészt az IActorEvents interfészből kell származtatni. A metódusok argumentumainak szerializálható adatszerződésnek kell lenniük. A metódusnak érvénytelennek kell lennie, mivel az eseményértesítések az egyik módja és legjobb erőfeszítése.

public interface IGameEvents : IActorEvents
{
    void GameScoreUpdated(Guid gameId, string currentScore);
}
public interface GameEvents implements ActorEvents
{
    void gameScoreUpdated(UUID gameId, String currentScore);
}

Deklarálja az aktor által közzétett eseményeket az aktor felületén.

public interface IGameActor : IActor, IActorEventPublisher<IGameEvents>
{
    Task UpdateGameStatus(GameStatus status);

    Task<string> GetGameScore();
}
public interface GameActor extends Actor, ActorEventPublisherE<GameEvents>
{
    CompletableFuture<?> updateGameStatus(GameStatus status);

    CompletableFuture<String> getGameScore();
}

Az ügyféloldalon implementálja az eseménykezelőt.

class GameEventsHandler : IGameEvents
{
    public void GameScoreUpdated(Guid gameId, string currentScore)
    {
        Console.WriteLine(@"Updates: Game: {0}, Score: {1}", gameId, currentScore);
    }
}
class GameEventsHandler implements GameEvents {
    public void gameScoreUpdated(UUID gameId, String currentScore)
    {
        System.out.println("Updates: Game: "+gameId+" ,Score: "+currentScore);
    }
}

Az ügyfélen hozzon létre egy proxyt az eseményt közzétevő és az eseményeire előfizető szereplő számára.

var proxy = ActorProxy.Create<IGameActor>(
                    new ActorId(Guid.Parse(arg)), ApplicationName);

await proxy.SubscribeAsync<IGameEvents>(new GameEventsHandler());
GameActor actorProxy = ActorProxyBase.create<GameActor>(GameActor.class, new ActorId(UUID.fromString(args)));

return ActorProxyEventUtility.subscribeAsync(actorProxy, new GameEventsHandler());

Feladatátvétel esetén az aktor feladatátvételt végezhet egy másik folyamatra vagy csomópontra. Az aktorproxy kezeli az aktív előfizetéseket, és automatikusan újra előfizeti őket. Az újra-előfizetési időközt az ActorProxyEventExtensions.SubscribeAsync<TEvent> API-val szabályozhatja. A leiratkozáshoz használja az API-t ActorProxyEventExtensions.UnsubscribeAsync<TEvent> .

Az aktoron tegye közzé az eseményeket. Ha vannak előfizetők az eseményre, az Actors-futtatókörnyezet elküldi nekik az értesítést.

var ev = GetEvent<IGameEvents>();
ev.GameScoreUpdated(Id.GetGuidId(), score);
GameEvents event = getEvent<GameEvents>(GameEvents.class);
event.gameScoreUpdated(Id.getUUIDId(), score);

Következő lépések