Azure: How to move messages from poison queue to back to main queue?

前端 未结 7 1871
慢半拍i
慢半拍i 2020-12-30 06:57

I\'m wondering if there is a tool or lib that can move messages between queues? Currently, i\'m doing something like below

public static void ProcessQueueMes         


        
7条回答
  •  太阳男子
    2020-12-30 07:30

    To anyone coming here looking for a Node equivalent of @MitchWheats answer using an Azure Function.

    import AzureStorage from 'azure-storage'
    import { Context, HttpRequest } from '@azure/functions'
    import util from 'util'
    
    const queueService = AzureStorage.createQueueService()
    queueService.messageEncoder = new AzureStorage.QueueMessageEncoder.TextBase64QueueMessageEncoder()
    
    const deleteMessage = util.promisify(queueService.deleteMessage).bind(queueService)
    const createMessage = util.promisify(queueService.createMessage).bind(queueService)
    const getMessage = util.promisify(queueService.getMessage).bind(queueService)
    
    export async function run (context: Context, req: HttpRequest): Promise {
      try {
        const poisonQueue = (req.query.queue || (req.body && req.body.queue));
        const targetQueue = poisonQueue.split('-')[0]
    
        let count = 0
    
        while (true) {
          const message = await getMessage(poisonQueue)
          if (!message) { break; }
          if (message.messageText && message.messageId && message.popReceipt) {
            await createMessage(targetQueue, message.messageText)
            await deleteMessage(poisonQueue, message.messageId, message.popReceipt)
          }
          count++
        }
    
        context.res = {
          body: `Replayed ${count} messages from ${poisonQueue} on ${targetQueue}`
        };
      } catch (e) {
        context.res = { status: 500 }
      }
    }
    

    To use the function you need to you provide connection information for the storage account used for your storage queues. This is provided as environment variables. Either you provide AZURE_STORAGE_ACCOUNT and AZURE_STORAGE_ACCESS_KEY, or AZURE_STORAGE_CONNECTION_STRING. More on this is available in the Azure Storage SDK docs.

    Also wrote a few lines about it in this Medium article

提交回复
热议问题