2013-06-06 2 views
2

AutoDeleteOnIdle을 설정할 때 올바른 동작을 파악하려고합니다. MyGameMessages라는 주제가 있습니다 (광고로 간주 될 수 있기 때문에 게임 이름을 공개하지 않음).Azure Servicebus AutoDeleteOnIdle

내가하는 일은 내 서버 팜의 각 노드에서 구독을 만드는 것입니다.

첫 번째 구현 :

var manager = GetNameSpaceManager(); 
_subscriptionId = Guid.NewGuid().ToString(); 
var description = new SubscriptionDescription(topic, _subscriptionId); 
description.AutoDeleteOnIdle = TimeSpan.FromHours(1); 
manager.CreateSubscription(description); 

은 그 때 나는 거의 루프 영원히 (또는 적어도 때까지 종료하라는 지시를 내 렸습니다) 스레드

while(_running) 
{ 
    if (_subscriptionId == null) 
     break; 

    var message = client.Receive(TimeSpan.FromMinutes(1)); // MARK A 
    if (message != null) 
    { 
     var body = message.GetBody<T>(); 
     // Do stuff with message 
     message.Complete(); 
    } 

}

질문 A를 시작 MARK A.에 시간 초과가 없었습니다. 한 시간 내에이 주제에 메시지가 보내지지 않으면 구독이 자동 응답되었습니다. 이것은 예상되는 행동입니까? 클라이언트는 실제로 죽은 것이 아니라 단지 메시지를 기다리는 것 주위에 앉아 있다고 생각합니다. 살아 있지 않아?

B

질문 : 도움이 될

가 MARK A의 같은 시간 제한을 추가하거나 새 구독을 만들 때마다 50 분 (다만 경우에 작은 중복을 만드는) 및 이전을 포기하는 더 나은 솔루션입니다 하나?

감사

요한

답변

2

요한, 당신은 당신의 기대에 따라 작동해야 위 설명하는 시나리오. 보류중인 수신 호출은 메시지가 전송되지 않아도 가입을 유지합니다. Receive에 더 긴 시간 초과를 사용하면 메시지 볼륨이 적을 때 대화 트래픽이 발생하지 않으므로 더 좋습니다. 한가지 확인해야 할 것은 주제에 대해 AutoDeleteOnIdle 값을 설정하는 경우입니다.이 경우 구독에서 수신하면 주제가 활성 상태로 유지되지 않으며 1 시간 동안 주제에 메시지가 전송되지 않으면 삭제됩니다. 주제를 삭제하면 모든 구독도 삭제됩니다.

구독 정보가 계속 삭제되는 것을 볼 수 있습니까? 그렇다면 Azure 라이브 사이트 지원 및 제품 팀이 티켓을 조사하여 세부 사항을 조사하십시오.

+0

30 분마다 주제에 메시지를 보내는 타이머를 추가했습니다. 구독을 유지합니다. 내가 그렇게하지 않으면 삭제 될 것입니다. 올바른 행동을 지적 해 주셔서 감사합니다. 나는 티켓을 팀에 제출할 것이다! 불합리한 승인을 드려 죄송합니다. –

관련 문제