System.Fabric.FabricNotPrimaryException 타이머에서 상태를 저장할 때

Alex Zevenbergen

Service Fabric에서 호스팅되는 상태 저장 서비스를 작성하고 있습니다. 서비스의 역할은 외부 대기열의 메시지를 사용하고이를 변환하여 자체 메시징 시스템에 배치하는 것입니다. 처리량은 공급 업체 문서에 따라 초당 최대 6k 메시지가 될 수 있습니다.

메시지로드를 분산시키기 위해 서비스를 여러 파티션으로 구성했으며 각 파티션에는 최소 2 / 최대 3 개의 복제본이 있습니다. 장애를 복구하기 위해 공급 업체 대기열에 가입하고 메시지를 받고 싶은 시점의 타임 스탬프를 전달할 수 있습니다. 이를 위해 서비스 상태에서 처리 된 마지막 메시지의 타임 스탬프를 저장합니다. 메시지의 양 때문에 나는 타이머에 이것을 '저장'하기로 결정했습니다 (그리고 잠재적 인 메시지 중복을 허용합니다)

이것은 시간에 의해 호출되는 코드입니다.

private async void _timer_Elapsed(object sender, ElapsedEventArgs e)
    {
        var saveRetryPolicy = Policy
            .Handle<Exception>()
            .WaitAndRetryAsync(5, retryAttempt =>
                TimeSpan.FromSeconds(Math.Pow(2, retryAttempt))
            );

        await saveRetryPolicy.ExecuteAsync(async () =>
        {
            using (var tx = _stateManager.CreateTransaction())
            {
                var state = await _stateManager.TryGetAsync<IReliableDictionary<string, long>>(TimestampStateName);

                if (state.HasValue)
                {
                    await state.Value.AddOrUpdateAsync(tx, TimestampStateName, _lastTXTimestamp,
                        (s, l) => _lastTXTimestamp);

                    await tx.CommitAsync();
                }
                else
                {
                    var s =
                        await _stateManager.GetOrAddAsync<IReliableDictionary<string, long>>(tx, TimestampStateName);

                    await tx.CommitAsync();
                    _timer_Elapsed(this, null);
                }
            }
        });
    }

이것을 지속하려고 할 때마다 각 파티션에서 'System.Fabric.FabricNotPrimaryException'오류가 발생합니다.

재시도 정책 (Poly Retry 제공)을 포함했습니다.이를 권장하는 유사한 문제에 대한 의견이 있습니다. 이것은 효과가 없었고 오류가보고되기까지의 시간을 연장 시켰습니다.

SF가 어떻게 사용되어야하는지에 대한 근본적인 오해가 있습니까? 이것은 나에게 간단한 사용 사례로 보입니다.

LoekD

댓글 답변 :

모든 복제본에서 타이머를 시작하지 않고 기본 복제본에서만 타이머를 시작해야합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

문서를 수동으로 저장할 때 자동 저장 타이머를 재설정해야합니다.

분류에서Dev

EJB에서 타이머를 만들려고 할 때 예외

분류에서Dev

사용자가 페이지 사이를 이동할 때 Windows Phone 8.1에서 스크롤 상태 저장

분류에서Dev

저장 프로 시저를 사용할 때 C # "System.IndexOutOfRangeException : 위치 0에 행이 없습니다."

분류에서Dev

사용자가 웹 페이지에서 별도의 경로로 이동할 때 JavaScript에 카운트 업 타이머를 저장하는 방법

분류에서Dev

bottomNavigationView에서 조각 B로 이동할 때 조각 A의 상태 저장

분류에서Dev

Linux에서 파일을 저장할 때 System.IO.DirectoryNotFoundException 발생

분류에서Dev

HTTP 상태 400 – 데이터베이스에 날짜를 저장하려고 할 때 잘못된 요청

분류에서Dev

Service Fabric Actors-데이터베이스에 상태 저장

분류에서Dev

반응에서 useReducer 저장소는 다른 페이지로 라우팅 할 때 상태를 잃습니다. useContext는 초기 상태 만로드합니다.

분류에서Dev

다시로드 할 때 캔버스 상태를 저장하는 방법이 있습니까?

분류에서Dev

파티션을 추가 할 때 KStreams는 상태 저장소 데이터를 어떻게 처리합니까?

분류에서Dev

Android 시스템이 앱을 종료 할 때 내 앱 상태를 저장하는 방법은 무엇입니까?

분류에서Dev

조각간에 전환 할 때지도 상태를 저장하는 방법은 무엇입니까?

분류에서Dev

svg 이미지를 저장할 때 색상이 다릅니다.

분류에서Dev

상태 B의 상태를 설정할 때 React 후크는 상태 A의 이전 상태를 얻습니다.

분류에서Dev

타이머에서 부울 상태를 확인할 수 없습니다.

분류에서Dev

"저장"을 클릭 할 때 상태가 업데이트되지 않음

분류에서Dev

API에서 데이터를로드 할 때 반응 후크에 설정된 상태를 저장하는 데 문제가 있습니까?

분류에서Dev

객체 유형을 사용할 때 int 값을 저장할 때 object.GetType ()이 system.Int32를 반환하는 이유는 무엇입니까?

분류에서Dev

다른 뷰 컨트롤러 / 테이블 뷰 컨트롤러를 탐색 할 때 TableViewController에 UISwitch의 상태를 어떻게 저장할 수 있습니까?

분류에서Dev

서비스 및 활동 내에서 타이머를 시작할 때의 차이점

분류에서Dev

저장 프로 시저에서 dbo를 사용할 때의 장점 및 단점

분류에서Dev

한 메뉴에서 다른 메뉴로 이동할 때 CSS 배경색 속성 변경 상태를 저장하는 방법

분류에서Dev

캔버스에서 이미지를 저장할 때 확장자 누락

분류에서Dev

Photoshop은 저장할 때 항상 다른 이름으로 저장 대화 상자를 표시합니다.

분류에서Dev

C #에서 저장 프로 시저를 저장하려고 할 때 테이블 근처의 Incorect 구문

분류에서Dev

저장 프로 시저로 업데이트 할 때 NHibernate가 메모리 내 상태를 반영하지 않는 이유는 무엇입니까?

분류에서Dev

Excel 판다에 저장할 때 이상한 문제

Related 관련 기사

  1. 1

    문서를 수동으로 저장할 때 자동 저장 타이머를 재설정해야합니다.

  2. 2

    EJB에서 타이머를 만들려고 할 때 예외

  3. 3

    사용자가 페이지 사이를 이동할 때 Windows Phone 8.1에서 스크롤 상태 저장

  4. 4

    저장 프로 시저를 사용할 때 C # "System.IndexOutOfRangeException : 위치 0에 행이 없습니다."

  5. 5

    사용자가 웹 페이지에서 별도의 경로로 이동할 때 JavaScript에 카운트 업 타이머를 저장하는 방법

  6. 6

    bottomNavigationView에서 조각 B로 이동할 때 조각 A의 상태 저장

  7. 7

    Linux에서 파일을 저장할 때 System.IO.DirectoryNotFoundException 발생

  8. 8

    HTTP 상태 400 – 데이터베이스에 날짜를 저장하려고 할 때 잘못된 요청

  9. 9

    Service Fabric Actors-데이터베이스에 상태 저장

  10. 10

    반응에서 useReducer 저장소는 다른 페이지로 라우팅 할 때 상태를 잃습니다. useContext는 초기 상태 만로드합니다.

  11. 11

    다시로드 할 때 캔버스 상태를 저장하는 방법이 있습니까?

  12. 12

    파티션을 추가 할 때 KStreams는 상태 저장소 데이터를 어떻게 처리합니까?

  13. 13

    Android 시스템이 앱을 종료 할 때 내 앱 상태를 저장하는 방법은 무엇입니까?

  14. 14

    조각간에 전환 할 때지도 상태를 저장하는 방법은 무엇입니까?

  15. 15

    svg 이미지를 저장할 때 색상이 다릅니다.

  16. 16

    상태 B의 상태를 설정할 때 React 후크는 상태 A의 이전 상태를 얻습니다.

  17. 17

    타이머에서 부울 상태를 확인할 수 없습니다.

  18. 18

    "저장"을 클릭 할 때 상태가 업데이트되지 않음

  19. 19

    API에서 데이터를로드 할 때 반응 후크에 설정된 상태를 저장하는 데 문제가 있습니까?

  20. 20

    객체 유형을 사용할 때 int 값을 저장할 때 object.GetType ()이 system.Int32를 반환하는 이유는 무엇입니까?

  21. 21

    다른 뷰 컨트롤러 / 테이블 뷰 컨트롤러를 탐색 할 때 TableViewController에 UISwitch의 상태를 어떻게 저장할 수 있습니까?

  22. 22

    서비스 및 활동 내에서 타이머를 시작할 때의 차이점

  23. 23

    저장 프로 시저에서 dbo를 사용할 때의 장점 및 단점

  24. 24

    한 메뉴에서 다른 메뉴로 이동할 때 CSS 배경색 속성 변경 상태를 저장하는 방법

  25. 25

    캔버스에서 이미지를 저장할 때 확장자 누락

  26. 26

    Photoshop은 저장할 때 항상 다른 이름으로 저장 대화 상자를 표시합니다.

  27. 27

    C #에서 저장 프로 시저를 저장하려고 할 때 테이블 근처의 Incorect 구문

  28. 28

    저장 프로 시저로 업데이트 할 때 NHibernate가 메모리 내 상태를 반영하지 않는 이유는 무엇입니까?

  29. 29

    Excel 판다에 저장할 때 이상한 문제

뜨겁다태그

보관