Как я могу установить срок действия (TTL) для сообщения очереди с помощью соединителя приложений логики очереди хранилища Azure?

#azure #azure-logic-apps #azure-api-apps #azure-storage-queues

#azure #azure-logic-apps #azure-api-apps #azure-storage-queues

Вопрос:

В моем приложении logic я не вижу способа установить TTL или дату истечения срока действия сообщения очереди.

Azure помещает сообщение в действие приложения логики очереди хранилища

Настройки для quot;Поместить сообщение в очередьquot;

Но это возможно из пользовательского интерфейса, поэтому я знаю, что API может это сделать:

Портал Azure: updateuser

Я даже пытался «взломать» параметр строки запроса messagettl в представлении кода:

 "actions": {
    "Put_a_message_on_a_queue": {
        "inputs": {
            "body": "@{base64(items('For_each'))}",
            "host": {
                "connection": {
                    "name": "@parameters('$connections')['azurequeues']['connectionId']"
                }
            },
            "method": "post",
            "path": "/@{encodeURIComponent('updateuser')}/messages?messagettl=3600"
        },
        "runAfter": {},
        "type": "ApiConnection"
    }
}
  

Но я получаю сообщение об ошибке:

 {
 "message": "Unable to match incoming request to an operation."
}
  

Ответ №1:

Я понял это, просмотрев вызов API, выполненный в пользовательском интерфейсе добавления сообщений в очередь на портале Azure. Он добавляет параметр строки запроса messagettl , который равен секундам TTL.

Итак, я просмотрел схему здесь и обнаружил, что вы можете передать "queries": {...} объект в HTTP-вызов для добавления сообщения.

Окончательный вид кода в формате JSON:

 "actions": {
    "Put_a_message_on_a_queue": {
        "inputs": {
            "body": "@{base64(items('For_each'))}",
            "host": {
                "connection": {
                    "name": "@parameters('$connections')['azurequeues']['connectionId']"
                }
            },
            "method": "post",
            "path": "/@{encodeURIComponent('updateuser')}/messages",
            "queries": {
                "messagettl": 3600
            }
        },
        "runAfter": {},
        "type": "ApiConnection"
    }
}
  

Комментарии:

1. Я перешел на logic apps после того, как они устарели от старого планировщика. Я забыл о TTL, и срок действия нескольких моих заданий не истек, как должен был, когда пакетный процессор не работал на выходные. Тьфу. По крайней мере, мне не нужно запускать свой собственный метод / функцию / действие, чтобы элемент был добавлен в очередь сейчас. Спасибо!

2. Работает ли установка messagettl = -1, как указано здесь, в этом документе? Я не смог заставить это работать. learn.microsoft.com/en-us/rest/api/storageservices/put-message . Ошибка: один из параметров запроса, указанных в URI запроса, выходит за пределы допустимого диапазона. Минимально допустимый 1; Максимально допустимый 604800