Service Fabric - Требуются ли определения конечной точки для удаленного обслуживания? - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь понять, в каких сценариях требуются определения конечных точек в ServiceManifest. У меня есть служба с отслеживанием состояния с несколькими слушателями удаленного взаимодействия. Моя реализация CreateServiceReplicaListeners:

        protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners()
        {
            return new[]
            {
                new ServiceReplicaListener(context => this.CreateServiceRemotingListener(context)),
                new ServiceReplicaListener(context =>
                                           {
                                               return new FabricTransportServiceRemotingListener(context,
                                                                                                 new CustomService<string>(),
                                                                                                 new FabricTransportRemotingListenerSettings
                                                                                                 {
                                                                                                     EndpointResourceName = "ustdfdomgfasdf"
                                                                                                 });
                                           }, name: "CustomListener")
            };
        }

Имя ресурса конечной точки для пользовательского прослушивателя является мусором. Я не определил эту конечную точку в ресурсах манифеста службы:

<Resources>
    <Endpoints>
      <Endpoint Name="ServiceEndpoint" />
      <Endpoint Name="ReplicatorEndpoint" />
    </Endpoints>
  </Resources>

Тем не менее, в процессе тестирования я все еще могу получить прокси для CustomListener:

InventoryItem i = new InventoryItem(description, price, number, reorderThreshold, max);

var applicationInstance = FabricRuntime.GetActivationContext().ApplicationName.Replace("fabric:/", String.Empty);            
var inventoryServiceUri = new Uri("fabric:/" + applicationInstance + "/" + InventoryServiceName);

//Doesn't fail
ICustomService customServiceClient = ServiceProxy.Create<ICustomService>(inventoryServiceUri, 
    i.Id.GetPartitionKey(), 
    listenerName: "CustomListener");

//Still doesn't fail
var added = await customServiceClient.Add(1, 2);

Для меня это означает, что определения конечной точки не требуются для удаленного обслуживания, если имена конечной точки и прослушивателя являются уникальными. Это так? Если нет, то почему мой пример работает?

1 Ответ

1 голос
/ 21 марта 2019

Конечные точки необходимы для указания сервисной фабрике выделять порты в узле для сервисов, запускаемых на этом узле, это предотвратит коллизию портов, когда многие сервисы открывают порты в узле.

После выделения они создаются как Переменные среды в процессе обслуживания, что-то вроде: Fabric_Endpoint_<EndpointName> : port

Когда вы создаете прослушиватели, они отвечают за открытие портов, обычно используяпорты, выделенные через конечные точки, но не мешают вам создать пользовательский приемник для открытия любого порта (если он работает с достаточными правами для этого)

CreateServiceRemotingListener(context) создает прослушиватели по умолчанию

EndpointResourceNameнастройка, сообщающая, какая конечная точка будет использоваться слушателем, если она не определена, DefaultEndpointResourceName настройка используется в качестве конечной точки по умолчанию, значением по умолчанию является «ServiceEndpoint»

. На данный момент я не уверен, что отвечу так:если EndpointResourceName не найден, он использует DefaultEndpointResourceName, я так полагаю, необходимо проверить код, чтобы подтвердить это.

При многократном прослушиванииПользователи используют один и тот же порт, у них обычно есть путь для идентификации каждого из них, например: tcp://127.0.0.1:1234/endpointpath

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...