Azure Function QueueTrigger 和 int 消息

Azure Function QueueTrigger and int message

我想将 int 值保存到队列消息中,然后在 Azure Function QueueTrigger 上获取它。

我是通过以下方式保存的:

        int deviceId = -1;
        await queue.AddMessageAsync(new CloudQueueMessage(deviceId.ToString()));

然后监听队列:

    public async Task Run(
        [QueueTrigger("verizon-suspend-device", Connection = "StorageConnectionString")] string queueMessage, 
        ILogger log)
    {
        int deviceId = int.Parse(queueMessage);

但所有邮件都被移至 verizon-suspend-device-poison 队列。怎么了?

Azure Function Queue Triggers currently require Base64-encoded messages 是一个不幸的限制。如果您 运行 您的代码针对存储模拟器,您应该会看到触发器的异常,例如 The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters.

至少现在(即,直到触发器可以处理 binary/utf8 消息),排队代码必须将消息作为 Base64 字符串放在队列中。 string 消息的队列触发代码以 here, and AsString assumes a Base64 encoding.

结尾

对于 (old) version of the storage SDK,您可以发送整数的 Base64 编码 UTF-8 字符串表示形式:

var bytes = Encoding.UTF8.GetBytes(deviceId.ToString());
await queue.AddMessageAsync(new CloudQueueMessage(Convert.ToBase64String(bytes), isBase64Encoded: true));

使用 new storage SDK, you would set MessageEncoding on your QueueClient to QueueMessageEncoding.Base64 然后只发送整数的字符串表示(新的存储 SDK 将为您进行 UTF-8 编码,然后进行 Base64 编码)。