2012-11-02 7 views
6

내가 염두에두고있는 시나리오는 서비스 버스가 인스턴스 간 통신에 사용되므로 구독이 서비스 인스턴스마다 고유합니다. 최종 결과는 인스턴스가 정상적으로 종료되지 않으면 구독이 삭제되지 않는다는 것입니다.자동 만료 고아 구독 (Azure ServiceBus Messaging SubscriptionClient)

서비스 인스턴스가 "중지되어"다시 시작될 때 이전 구독 콘텐츠는 관련이 없으며 무시할 수 있습니다.

그렇다면 일부 고아 탐지 메커니즘을 사용하지 않고도 서비스 버스 가입 또는 유사한 시뮬레이션을위한 "수명"을 설정할 수있는 방법이 있습니까?

답변

4

정확한 기능은 다음 릴리스 중 하나에 대한 백 로그에 있습니다. 즉, 푸른 하늘에서는 역할 환경의 인스턴스 ID를 사용하여 가입 이름을 생성 할 수 있으므로 다시 시작하는 인스턴스에서 가입을 재사용 할 수 있습니다. instance-id 이름은 안정적입니다.

편집 : http://msdn.microsoft.com/en-us/library/microsoft.servicebus.messaging.subscriptiondescription.autodeleteonidle.aspx

그것은 아주 사용하기 쉽습니다 (아래 예 참조) :이 기능은 내가 미리가 2013 년의 시작을 발표 한 해결, 동일한 문제가 있었다

+0

답변 해 주셔서 감사합니다. Clemens. Instance ID를 사용하여 가입 이름을 생성하는 것은 우리가하는 일이지만, PID 번호를 사용하여 생성되는 개발 패브릭 인스턴스 이름으로 모든 디버그 세션에서 여전히 많은 쓰레기가 남아 있습니다. –

+1

@ 이것이 클레멘스가 언제 발표 될 수 있을지 아십니까? –

+0

나는 또한 이것이 공개 될 때를 찾고있다. 클라이언트 당 silverlight 클라이언트 구독에 대한 비슷한 유스 케이스가 있습니다. 낡은 구독을 찾아 주제 이름을 알고있는 경우 자신의 정리를 롤하는 옵션이있을 수 있습니다. http://stackoverflow.com/questions/15871119/cleaning-up-stale-azure-service-bus-topic-subscriptions – kjsteuer

0

AutoDeleteOnIdle https://docs.microsoft.com/en-us/dotnet/api/microsoft.servicebus.messaging.subscriptiondescription입니다. 불행히도 AutoDeleteOnIdle 기간 동안 게시 된 메시지가 없으면 메시지를 기다리는 프로세스가 있더라도 구독 시간이 초과 된 것처럼 보입니다 (Azure Servicebus AutoDeleteOnIdle에 따라).

NamespaceManager manager=NamespaceManager.CreateFromConnectionString(serviceBusConnectionString); 
if(!manager.SubscriptionExists(topic,subscriptionName)) 
{ 
    manager.CreateSubscription(new SubscriptionDescription(topic,subscriptionName) { 
     AutoDeleteOnIdle=TimeSpan.FromDays(2) 
    }); 
} 
6

Azure SDK 2.0부터는 예상대로 작동합니다.

또한 다른 보고서와 달리 내 테스트에서 구독을 수신 대기중인 수신기가있는 한 구독은 삭제되지 않습니다.

var description = new SubscriptionDescription(topicPath, subscriptionId); 
description.AutoDeleteOnIdle = TimeSpan.FromSeconds(600); 
namespaceManager.CreateSubscription(description);