서비스 버스에 지속적으로 검사하는 메시지가 있는지 확인하는 기능이 있습니다.servicebus messagecount 검사는 0이더라도 true를 반환합니다.
액수를 얻을 기능은 다음과 같습니다
public int GetActiveMessageCount()
{
var connectionString = azureConnectionStringWithoutEntityPath;
long messageCount = 0;
try
{
var nameSpaceManager = NamespaceManager.CreateFromConnectionString(connectionString);
messageCount = nameSpaceManager.GetQueue(azureQueueName).MessageCountDetails.ActiveMessageCount;
}
catch
{
throw;
}
return (int)messageCount;
}
그리고 검사는 다음과 같습니다
는public bool MessageCountBiggerThenZero()
{
int messageCount = 0;
try
{
messageCount = this.GetActiveMessageCount();
}
catch (Exception e)
{
Debug.WriteLine("An error occured while checking if the messageValue is bigger then zero and not null saying : " + e);
}
return messageCount > 0;
}
이 0 개의 메시지가있을 때 처음에 완벽하게 작동하지만이 시작된 후 다음 메시지를 수신 MessageCountBiggerThenZero 체크를 계속 통과하는 마지막 메시지를 전달합니다.
누구에게 이것이 어떻게 될 수 있는지 알고 있습니까? 마지막 메시지 이후에 serviceBus가 다른 값을 반환합니까?
편집 :
체크에더 많은 통찰력 (어떤 메시지가 더 이상이없는 경우에도 그래서 여전히 if 문을 통과) :
public object RecieveOneMessageFromServiceBus()
{
var client = QueueClient.CreateFromConnectionString(azureConnectionString);
BrokeredMessage brokermessage = null;
client.PrefetchCount = 1; // get 1 message at a time
if (MessageCountBiggerThenZero())
{
try
{
// try to recieve message
}
catch
{
throw;
}
}
else
{
return null;
}
}
당신이 호출 할'MessageCountBiggerThenZero' 방법을 구현하기 위해, 당신은 메시지를 받고 확인 MessageCountBiggerThenZero 호출에 대한 코드를 제공 할 수있다? –
@ Bruce-MSFT 질문에 코드를 추가했습니다. 다른 곳에서도 사용하지만 동일한 결과가 있습니다. – Tvt