Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Как описано в слоении служб, сама актёрская служба является надежной службой. Вы можете написать собственную службу, наследуемую от ActorService
. Вы также можете реализовать функции уровня сервиса таким же образом, как при наследовании сервиса с сохранением состояния, например:
- Резервное копирование и восстановление службы.
- Общая функциональность для всех участников, например, автоматический выключатель.
- Удаленные вызовы процедур на службе акторов и на каждом отдельном актере.
Используйте службу акторов
Экземпляры акторов имеют доступ к сервису акторов, в котором они работают. Используя службу акторов, экземпляры акторов могут программно получить контекст службы. Контекст службы содержит идентификатор секции, имя службы, имя приложения и другие сведения о платформе Azure Service Fabric.
Task MyActorMethod()
{
Guid partitionId = this.ActorService.Context.PartitionId;
string serviceTypeName = this.ActorService.Context.ServiceTypeName;
Uri serviceInstanceName = this.ActorService.Context.ServiceName;
string applicationInstanceName = this.ActorService.Context.CodePackageActivationContext.ApplicationName;
}
CompletableFuture<?> MyActorMethod()
{
UUID partitionId = this.getActorService().getServiceContext().getPartitionId();
String serviceTypeName = this.getActorService().getServiceContext().getServiceTypeName();
URI serviceInstanceName = this.getActorService().getServiceContext().getServiceName();
String applicationInstanceName = this.getActorService().getServiceContext().getCodePackageActivationContext().getApplicationName();
}
Как и все службы Reliable Services, служба акторов должна быть зарегистрирована с типом службы в среде выполнения Service Fabric. Чтобы служба акторов выполняла экземпляры акторов, тип актора также должен быть зарегистрирован в службе акторов. Метод ActorRuntime
регистрации выполняет эту работу для актеров. В самом простом случае можно зарегистрировать тип субъекта, а затем служба субъектов использует параметры по умолчанию.
static class Program
{
private static void Main()
{
ActorRuntime.RegisterActorAsync<MyActor>().GetAwaiter().GetResult();
Thread.Sleep(Timeout.Infinite);
}
}
Кроме того, можно использовать лямбда-код, предоставляемый методом регистрации, чтобы создать службу субъектов самостоятельно. Затем можно настроить службу акторов и явно создать экземпляры акторов. Вы можете внедрить зависимости своему актеру через его конструктор.
static class Program
{
private static void Main()
{
ActorRuntime.RegisterActorAsync<MyActor>(
(context, actorType) => new ActorService(context, actorType, () => new MyActor()))
.GetAwaiter().GetResult();
Thread.Sleep(Timeout.Infinite);
}
}
static class Program
{
private static void Main()
{
ActorRuntime.registerActorAsync(
MyActor.class,
(context, actorTypeInfo) -> new FabricActorService(context, actorTypeInfo),
timeout);
Thread.sleep(Long.MAX_VALUE);
}
}
Методы службы акторов
Служба акторов реализует IActorService
(C#) или ActorService
(Java), которые, в свою очередь, реализуют IService
(C#) или Service
(Java). Этот интерфейс используется для удаленного взаимодействия в службах Reliable Services, что позволяет удаленно вызывать процедуры в методах службы. Он содержит методы уровня обслуживания, которые можно вызывать удаленно с помощью удаленного взаимодействия службы. Его можно использовать для перечисления и удаления субъектов.
Настраиваемая служба акторов
Используя регистрацию акторов с использованием лямбда-функции, вы можете зарегистрировать собственную пользовательскую службу акторов, наследующуюся от ActorService
(C#) и FabricActorService
(Java). Затем можно реализовать собственные функциональные возможности уровня обслуживания, написав класс службы, наследующий ActorService
(C#) или FabricActorService
(Java). Пользовательская служба актеров наследует всю функциональность среды выполнения актера от ActorService
(C#) или FabricActorService
(Java). Его можно использовать для реализации собственных методов службы.
class MyActorService : ActorService
{
public MyActorService(StatefulServiceContext context, ActorTypeInformation typeInfo, Func<ActorBase> newActor)
: base(context, typeInfo, newActor)
{ }
}
class MyActorService extends FabricActorService
{
public MyActorService(StatefulServiceContext context, ActorTypeInformation typeInfo, BiFunction<FabricActorService, ActorId, ActorBase> newActor)
{
super(context, typeInfo, newActor);
}
}
static class Program
{
private static void Main()
{
ActorRuntime.RegisterActorAsync<MyActor>(
(context, actorType) => new MyActorService(context, actorType, () => new MyActor()))
.GetAwaiter().GetResult();
Thread.Sleep(Timeout.Infinite);
}
}
public class Program
{
public static void main(String[] args)
{
ActorRuntime.registerActorAsync(
MyActor.class,
(context, actorTypeInfo) -> new FabricActorService(context, actorTypeInfo),
timeout);
Thread.sleep(Long.MAX_VALUE);
}
}
Реализация резервного копирования и восстановления акторов
Пользовательская служба актеров может предоставлять метод для резервного копирования данных актера, воспользовавшись прослушивателем удаленного взаимодействия, уже имеющимся в ActorService
. См. пример в разделе Резервное копирование и восстановление актеров.
Субъект, использующий стек удаленного взаимодействия версии 2 (совместимый с интерфейсом)
Стек удаленного взаимодействия версии 2 (совместимый с интерфейсом, известный как V2_1) содержит все функции стека удаленного взаимодействия версии 2. Его интерфейс совместим с удалённой платформой версии 1, но не обладает обратной совместимостью с V2 и V1. Чтобы обновить версию 1 до V2_1 без влияния на доступность службы, выполните действия, описанные в следующем разделе.
Для использования стека удаленного доступа V2_1 требуются следующие изменения:
Добавьте следующий атрибут сборки на интерфейсы акторов.
[assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2_1,RemotingClientVersion = RemotingClientVersion.V2_1)]
Создайте и обновите проекты сервиса акторов и клиента акторов, чтобы начать использовать стек версии 2.
Обновление службы субъектов до стека удаленного взаимодействия версии 2 (совместимого с интерфейсом) без влияния на доступность службы
Это изменение является двухэтапным обновлением. Выполните действия, описанные в этой последовательности.
Добавьте следующий атрибут сборки для интерфейсов акторов. Этот атрибут запускает два прослушивателя для актерной службы: V1 (существующего) и прослушивателя V2_1. Обновите службу акторов с помощью этого изменения.
[assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V1|RemotingListenerVersion.V2_1,RemotingClientVersion = RemotingClientVersion.V2_1)]
Обновите клиентов акторов после завершения предыдущего обновления. Этот шаг гарантирует, что прокси-актор использует стек удаленного вызова V2_1.
Этот шаг является необязательным. Измените предыдущий атрибут, чтобы удалить прослушиватель версии 1.
[assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2_1,RemotingClientVersion = RemotingClientVersion.V2_1)]
Субъект, использующий стек удаленного взаимодействия версии 2
В пакете NuGet версии 2.8 пользователи теперь могут использовать стек удаленного взаимодействия версии 2, который обеспечивает более высокую производительность и предоставляет такие функции, как настраиваемая сериализация. Удаленное взаимодействие версии 2 не совместимо с существующим стеком удаленного взаимодействия (теперь называется стек удаленного взаимодействия версии 1).
Для использования стека удаленного взаимодействия версии 2 требуются следующие изменения.
Добавьте следующий атрибут сборки в интерфейсы субъекта.
[assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2,RemotingClientVersion = RemotingClientVersion.V2)]
Создайте и обновите проекты сервиса актёров и клиента актёров, чтобы начать использовать стек V2.
Обновление службы субъекта до стека удаленного взаимодействия версии 2 без влияния на доступность службы
Это изменение является двухэтапным обновлением. Выполните действия, описанные в этой последовательности.
Добавьте следующий атрибут сборки в интерфейсы актёра. Этот атрибут запускает два прослушивателя для службы акторов: V1 (существующий) и прослушиватель V2. Обновите актёрский сервис с помощью этого изменения.
[assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V1|RemotingListenerVersion.V2,RemotingClientVersion = RemotingClientVersion.V2)]
Обновите клиенты акторов после завершения предыдущего обновления. Этот шаг гарантирует, что прокси-сервер субъекта использует стек удаленного взаимодействия версии 2.
Этот шаг является необязательным. Измените предыдущий атрибут, чтобы удалить прослушиватель версии 1.
[assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2,RemotingClientVersion = RemotingClientVersion.V2)]