Share via


Actor-gebeurtenissen

Actorgebeurtenissen bieden een manier om meldingen van de actor naar de clients te verzenden. Actorgebeurtenissen zijn ontworpen voor communicatie tussen actors en clients en mogen niet worden gebruikt voor communicatie tussen actors.

De volgende codefragmenten laten zien hoe u actorgebeurtenissen in uw toepassing gebruikt.

Definieer een interface die de gebeurtenissen beschrijft die door de actor zijn gepubliceerd. Deze interface moet worden afgeleid van de IActorEvents interface. De argumenten van de methoden moeten serialiseerbaar zijn voor het gegevenscontract. De methoden moeten een ongeldige waarde retourneren, omdat gebeurtenismeldingen één manier en beste inspanning zijn.

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

Declareer de gebeurtenissen die door de actor zijn gepubliceerd in de actorinterface.

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();
}

Implementeer de gebeurtenis-handler aan de clientzijde.

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);
    }
}

Maak op de client een proxy voor de actor die de gebeurtenis publiceert en abonneer u op de gebeurtenissen.

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());

In het geval van failovers kan de actor een failover uitvoeren naar een ander proces of knooppunt. De actorproxy beheert de actieve abonnementen en abonneert deze automatisch opnieuw. U kunt het interval voor het opnieuw abonnement beheren via de ActorProxyEventExtensions.SubscribeAsync<TEvent> API. Gebruik de ActorProxyEventExtensions.UnsubscribeAsync<TEvent> API om u af te melden.

Publiceer de gebeurtenissen op de actor zodra deze plaatsvinden. Als er abonnees van de gebeurtenis zijn, stuurt de Actors-runtime hen de melding.

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

Volgende stappen