C# Azure函数QueueTrigger和int消息

C# Azure函数QueueTrigger和int消息,c#,azure-functions,message-queue,azure-queues,queuetrigger,C#,Azure Functions,Message Queue,Azure Queues,Queuetrigger,我想将int值保存到队列消息,然后在Azure函数QueueTrigger上获取它 我通过以下方式保存: int deviceId = -1; await queue.AddMessageAsync(new CloudQueueMessage(deviceId.ToString())); 然后收听队列: public async Task Run( [QueueTrigger("verizon-suspend-device&qu

我想将int值保存到队列消息,然后在Azure函数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队列中。怎么了?

这是一个不幸的限制。如果在存储模拟器上运行代码,您应该会看到触发器出现异常,如
输入不是有效的Base-64字符串,因为它包含非Base-64字符、两个以上的填充字符或填充字符中的非法字符。

目前,至少在触发器能够处理二进制/utf8消息之前,排队代码必须将消息作为Base64字符串放置在队列上。
字符串
消息的队列触发代码结束,并且

为此,您可以发送整数的Base64编码UTF-8字符串表示形式:

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

使用,您只需发送整数的字符串表示形式(新的存储SDK将对您进行UTF-8编码,然后进行Base64编码)。

这是一个不幸的限制。如果在存储模拟器上运行代码,您应该会看到触发器出现异常,如
输入不是有效的Base-64字符串,因为它包含非Base-64字符、两个以上的填充字符或填充字符中的非法字符。

目前,至少在触发器能够处理二进制/utf8消息之前,排队代码必须将消息作为Base64字符串放置在队列上。
字符串
消息的队列触发代码结束,并且

为此,您可以发送整数的Base64编码UTF-8字符串表示形式:

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

使用,您只需发送整数的字符串表示形式(新的存储SDK将对您进行UTF-8编码,然后进行Base64编码)。

很多事情都可能出错。如果消息重试3次失败(默认为3次),则消息将中毒。您需要读取/发布这3次执行期间发生的异常/错误消息。另外1)删除
int.Parse(queueMessage)
,只需添加一个日志,看看您在函数中得到了什么/如果有的话。2) 将函数的整个代码放入一个try-catch-and-print异常中。查找异常/错误(尤其是代码之外的异常/错误)的最佳位置是门户->函数->函数->监视器,它根本没有被记录,即使我尝试记录
queueMessage
很多事情都可能出错。如果消息重试3次失败(默认为3次),则消息将中毒。您需要读取/发布这3次执行期间发生的异常/错误消息。另外1)删除
int.Parse(queueMessage)
,只需添加一个日志,看看您在函数中得到了什么/如果有的话。2) 将函数的整个代码放入一个try-catch-and-print异常中。查找异常/错误(尤其是代码之外的异常/错误)的最佳位置是门户->函数->函数->监视器,即使我尝试记录
queueMessage