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 编码)。
我想将 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 编码)。