Azure 函数队列为空

Posted

技术标签:

【中文标题】Azure 函数队列为空【英文标题】:Azure Functions Queue empty 【发布时间】:2021-02-25 05:10:02 【问题描述】:

我是 Azure 的新手。如果问题是基本的,请原谅我。 我有以下 http 触发器,旨在将消息流式传输到队列存储。

import logging
import azure.functions as func
def main(req: func.HttpRequest, msg: func.Out[func.QueueMessage]) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')
    input_msg = req.params.get('message')
    logging.info(input_msg)
    msg.set(input_msg)

    return func.HttpResponse(status_code=200, body='GotIt')

在本地进行了测试,并且;

部署它并且运行正常

但是,当我检查队列时,它是空的;

问题;

    为什么队列是空的,我可以做些什么来确保它注册消息? 是不是因为我的代码没有写消息而没有锁定?

我们将非常感谢您的帮助。

【问题讨论】:

在本地发送消息时也没有发送消息到队列? 是的,它没有......而且无法弄清楚问题是什么。 @Bowman Zhu 从我的本地运行它打印GotIt。没有任何东西进入队列 我已经发布了一个答案,你可以试试看问题是否还在你这边。 【参考方案1】:

更新:

function.json


  "scriptFile": "__init__.py",
  "bindings": [
    
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post"
      ]
    ,
    
      "type": "http",
      "direction": "out",
      "name": "$return"
    ,
    
      "type": "queue",
      "direction": "out",
      "name": "msg",
      "queueName": "outqueue",
      "connection": "AzureStorageQueuesConnectionString"
    
  ]

local.settings.json


  "IsEncrypted": false,
  "Values": 
    "AzureWebJobsStorage": "",
    "FUNCTIONS_WORKER_RUNTIME": "python",
    "AzureStorageQueuesConnectionString":"DefaultEndpointsProtocol=https;AccountName=0730bowmanwindow;AccountKey=xxxxxx;EndpointSuffix=core.windows.net"
  

host.json


  "version": "2.0",
  "logging": 
    "applicationInsights": 
      "samplingSettings": 
        "isEnabled": true,
        "excludedTypes": "Request"
      
    
  ,
  "extensionBundle": 
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[1.*, 1.2.0)"
  

原答案:

我做了一个简单的测试。下面的代码在我这边运行良好,你可以试试:

import logging

import azure.functions as func


def main(req: func.HttpRequest,msg: func.Out[str]) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')
    input_msg = req.params.get('message')
    logging.info(input_msg)
    msg.set(input_msg)
    return func.HttpResponse(
            "This is a test.",
            status_code=200
    )

这是文档:

https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-queue-output?tabs=python#example

发送:

队列存储:

【讨论】:

我会尝试恢复 仍然没有写入任何内容 @wwnde 我测试了你的相同代码。我工作没有问题。所以你的代码应该没有问题。您的存储帐户有任何限制吗?您还可以查看我更新的配置设置。 是否有我需要检查的队列设置? @wwnde 如果您使用连接字符串,您应该可以完全访问队列。你能展示一下你的 AzureStorageQueuesConnectionString 的结构吗?(不需要展示账户密钥和账号)

以上是关于Azure 函数队列为空的主要内容,如果未能解决你的问题,请参考以下文章

在队列为空之前调用join时的Python 3多处理队列死锁

java算法,队列为空和已满?

ActiveMQ:一条待处理消息但队列为空

队列为空时抛出测试异常[重复]

循环队列

Sliding Window POJ - 2823 单调队列模板题