C# Azure函数QueueTrigger和int消息
我想将int值保存到队列消息,然后在Azure函数QueueTrigger上获取它 我通过以下方式保存: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 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