2016-06-30 4 views
2

하늘색 서비스 패브릭을 사용하는 POC를 작업 중입니다. 내 서비스를 로컬 클러스터에 배포했으며 Local.xml의 기본 설정으로 잘 작동합니다.하늘색 서비스 패브릭 인스턴스 수

인스턴스 카운트를 변경하는 순간 예외가 발생합니다. 인스턴스 수를 변경하는 옵션은 어디에 있습니까? 기본적으로 두 노드에서 내 서비스를 실행하려고합니다. 이 기본값입니다 그 때 잘 작동 것 1.

의 InnerException : 이미 사용 HRESULT = -2146233088 메시지 = 오류 -4091 EADDRINUSE 주소 출처 = Microsoft.AspNetCore.Server.Kestrel 상태 코드 = -4091

내 local.xml 여기

<Parameters> 
    <Parameter Name="Product_InstanceCount" Value="2" /> 
    </Parameters> 

복사됩니다 어떤 도움이 정말 감사합니다.

감사

답변

5

공식 Microsoft 문서에 따르면, 당신은 당신이 동일한 포트를 듣고 여러 프로세스와의 충돌로 실행 로컬 cluster.Otherwise에 배포 할 때 서비스의 인스턴스가 실행되고 있는지 확인해야합니다 Azure에 배포 할 때 여러 인스턴스를 설정할 수 있습니다.

은 설명서를 참조하십시오 - https://azure.microsoft.com/en-us/documentation/articles/service-fabric-add-a-web-frontend/

+2

최신 버전의 도구는이 기능을 사용하여 열심히 실패하지 않고 노드 중 하나에만 엔드 포인트를 할당하고 클러스터가 비정상적이라는 경고를 생성하기 시작합니다. ETW 이벤트를 보면 "Microsoft.Net.Http.Server.WebListenerException (0x80004005) : http : // + : 6001/'접두어가 이미 등록되어 있습니다." –

+0

이미 등록 된 포트를 해제하는 방법 – abhi

1

당신이 ASP.Net 또는 Owin의 몇 가지 유형을 실행하는 경우이 서비스를 호스팅. 인스턴스 카운트 -1을 사용해야합니다. 그러면 각 노드에 하나의 인스턴스가 설정됩니다. 인스턴스 카운트가 2 인 경우 동일한 노드에있을 수도 있고 그렇지 않을 수도있는 인스턴스가 2 개 있습니다.

3

로컬 sf 클러스터를 사용하고 있고 서비스 끝점 포트를 수정 한 경우 하나의 인스턴스 만 사용하십시오. 예 :

Service.Endpoint는 8090 포트를 사용합니다. ServiceManifest.xml에 정의되어 있습니다. 로컬 클러스터에서 실제로 모든 것은 하나의 노드, 즉 개발 시스템에서 실행됩니다. 하드 정의 포트가있는 동일한 서비스 인스턴스 2 개를 만들려고하면 포트 사용 중 오류가 발생합니다.

하나의 인스턴스로 변경하거나 실제 Azure 클러스터로 이동하거나 하드 코드 된 포트 번호를 제거하십시오.

0

비슷한 문제가 있으며 빌드 스크립트로 해결했습니다. 빌드 스크립트를 통해 ServiceManififest를 대체하거나 Tokenizer를 사용하여 포트 값을 바꿀 수 있습니다.

업데이트 된/adjsuted 패키지 파일을 만들고 설치 한 다음 DeployFabricApplciation을 사용하여 배포하고 그런 방식으로 테스트 할 수 있습니다.

1

이 문제는 발생하지 않았습니다.

당신은 인스턴스가 직물 클라이언트를 사용하여 프로그래밍 방식으로 계산 변경할 수 있습니다

var fabricClient = new FabricClient(); 
var instanceCount = 3; 
var services = await fabricClient.QueryManager.GetServiceListAsync(new Uri("fabric:/MyMicroServiceApp")); 
var service = services.FirstOrDefault(e => e.ServiceName.AbsolutePath.Contains("MyService")); 
var updateDescription = new StatelessServiceUpdateDescription(); 
updateDescription.InstanceCount = instanceCount; 
await fabricClient.ServiceManager.UpdateServiceAsync(new Uri(service.ServiceName.AbsoluteUri), updateDescription); 

나는 큐의 크기에 따라 작업자 프로세스의 수를 증가시키는 개념 증명을 개발하기 위해 사용했다. 서비스의 인스턴스 수를 변경하면 서비스 패브릭 프레임 워크가 자동으로 노드에/서비스 노드 인스턴스를 배포/제거합니다.

관련 문제