1

Я хотел бы узнать, можно ли читать сообщения с треугольниками из очереди служебных шин в JAVA.Чтение мертвых сообщений из очереди служебных автобусов

Я нашел следующий пример https://code.msdn.microsoft.com/windowsazure/Brokered-Messaging-Dead-22536dd8/sourcecode?fileId=123792&pathId=497121593 Однако я не смог перевести код в JAVA.

Я также нашел https://github.com/Azure/azure-storage-java/tree/master/microsoft-azure-storage/src/com/microsoft/azure/storage Но, похоже, что-то там не существует.

Я также нашел несколько блогов (мне не разрешено добавлять больше ссылок, поэтому я не знаю, должен ли я в любом случае без соответствующих тегов). Но все они не описывают, как читать мертвые сообщения в JAVA.

Большого спасибо заранее

ответ

0

Я знаю, что это старая нить, но и для следующей потерянной души ищет решение ...

Я копал в источнике .NET SDK и обнаружил, что на самом деле это только простой HTTP вызов «/ $ DeadLetterQueue», то есть:

https://mynamespace.servicebus.windows.net/myqueuename/$DeadLetterQueue/messages/head 

// Peek-Lock Message from DLQ 
curl -X POST -H "authorization: insertSASHere" "https://mynamespace.servicebus.windows.net/myqueuename/%24DeadLetterQueue/messages/head" 

Так с помощью Java SDK все, что вам нужно читать сообщения из очереди Letter мертвых:

service.receiveQueueMessage(queueName + "/$DeadLetterQueue", opts); 

Вот очень простой, но конкретный пример (Dest ructive чтения):

public static void main(String[] args) throws ServiceException { 

    String namespace  = "namespace"; 
    String sharedKeyName = "keyName"; 
    String sharedSecretKey = "secretKey"; 
    String queueName  = "queueName";  

    // Azure Service Bus Service 
    Configuration config = ServiceBusConfiguration.configureWithSASAuthentication(namespace, sharedKeyName, sharedSecretKey, ".servicebus.windows.net"); 
    ServiceBusContract service = ServiceBusService.create(config); 

    // Receive and Delete Messages from DLQ 
    ReceiveMessageOptions opts = ReceiveMessageOptions.DEFAULT; 
    opts.setReceiveMode(ReceiveMode.RECEIVE_AND_DELETE); 

    while (true) { 
     // To get messages from the DLQ we just need the "$DeadLetterQueue" URI 
     ReceiveQueueMessageResult resultQM = service.receiveQueueMessage(queueName + "/$DeadLetterQueue", opts); 
     BrokeredMessage message = resultQM.getValue(); 
     if (message != null && message.getMessageId() != null) { 
      System.out.println("MessageID: " + message.getMessageId()); 
     } else { 
      System.out.println("No more messages."); 
      break; 
     } 
    } 
} 

Конечно это нигде не документированы в API спецификации REST, типичный Microsoft ...

0

Я не уверен в аспекте Java, но получать отмершие-буквенные сообщения точно так же, как механика чтения активного сообщения, но имя очереди отличается.

Используя API, вы можете вызвать QueueClient.FormatDeadLetterPath («NormalQueuePath»), чтобы получить имя пути в формате. Затем вы можете использовать это при вызове QueueClient.CreateFromConnectionString (...), чтобы получить клиента, с которого вы можете получать сообщения с мертвыми сообщениями.

Смежные вопросы