Azure 函数的绑定能否让消息作为缓冲区或使用特定编码传递
Can Azure function's binding let message passing as buffer or with specific encoding
我使用 azure 函数将消息从 eventhub 保存到 azure table。但是我遇到了一些编码问题。
我的场景是一个进程将 ascii 编码缓冲区发送到 eventhub,然后 azure 函数将其保存到 table。
但是,从 eventhub 获取参数的 azure 函数变成了 UTF8 字符串。这会导致一些无效的 UTF8 字节松动。
现在我怀疑是否可以通过以下两种方式解决问题:
- 绑定设置是否可以让触发器的参数从 eventhub 到 azure 函数是一个缓冲区而不是一个字符串。这里我开始使用nodejs模板。
- 或者,绑定让对象成为具有特定编码的字符串。然后我可以重新构建缓冲区。
或者有其他更好的方法来解决这个问题?
绑定支持字节数组。这是一个 C# 示例:
using System;
using System.Text;
public static void Run(byte[] myEventHubMessage, TraceWriter log)
{
string s1 = Encoding.UTF8.GetString(myEventHubMessage);
log.Info($"C# Event Hub trigger function processed a message: {s1}");
}
对于 Node,将数据类型设置为二进制。示例 function.json
{
"bindings": [
{
"type": "httpTrigger",
"name": "req",
"direction": "in",
"dataType": "binary"
},
{
"type": "http",
"name": "res",
"direction": "out"
}
]
}
对应index.js:
module.exports = function (context, req) {
var body = req.body;
context.log("TestResult:", {
isBuffer: Buffer.isBuffer(body),
length: body.length
});
context.res = {
status: 200,
body: "Success!"
};
context.done();
}
希望对您有所帮助!
我使用 azure 函数将消息从 eventhub 保存到 azure table。但是我遇到了一些编码问题。
我的场景是一个进程将 ascii 编码缓冲区发送到 eventhub,然后 azure 函数将其保存到 table。
但是,从 eventhub 获取参数的 azure 函数变成了 UTF8 字符串。这会导致一些无效的 UTF8 字节松动。
现在我怀疑是否可以通过以下两种方式解决问题:
- 绑定设置是否可以让触发器的参数从 eventhub 到 azure 函数是一个缓冲区而不是一个字符串。这里我开始使用nodejs模板。
- 或者,绑定让对象成为具有特定编码的字符串。然后我可以重新构建缓冲区。
或者有其他更好的方法来解决这个问题?
绑定支持字节数组。这是一个 C# 示例:
using System;
using System.Text;
public static void Run(byte[] myEventHubMessage, TraceWriter log)
{
string s1 = Encoding.UTF8.GetString(myEventHubMessage);
log.Info($"C# Event Hub trigger function processed a message: {s1}");
}
对于 Node,将数据类型设置为二进制。示例 function.json
{
"bindings": [
{
"type": "httpTrigger",
"name": "req",
"direction": "in",
"dataType": "binary"
},
{
"type": "http",
"name": "res",
"direction": "out"
}
]
}
对应index.js:
module.exports = function (context, req) {
var body = req.body;
context.log("TestResult:", {
isBuffer: Buffer.isBuffer(body),
length: body.length
});
context.res = {
status: 200,
body: "Success!"
};
context.done();
}
希望对您有所帮助!