Вот мой Azure конвейер:
IoTHub → EventHub sr c → Azure Функция в JavaScript → EventHub dest
В функции Azure мне нужно применить какое-либо преобразование к телу события, полученному в качестве входных данных, и поместить это преобразованное событие в конечный EventHub.
Через context.bindingData.systemPropertiesArray
я могу получить важные метаданные, такие как iothub-connection-device-id
:
module.exports = async function (context, messageBodies) {
messageBodies.forEach((messageBody, index) => {
const transformedMessageBody = transform(messageBody)
const deviceId = context.bindingData.systemPropertiesArray[index]['iothub-connection-device-id']
context.log(deviceId)
// here I can only set the messageBody. What's the way to attach back the original systemProperties?
context.bindings.eventHubDest = transformedMessageBody
})
}
Проблема : systemProperties
потеряны в целевом EventHub, потому что я могу найти способ установить их обратно в Azure Код функции:
Source Событие EventHub:
{
body: { foo: 'bar' },
properties: undefined,
offset: '143360',
sequenceNumber: 392,
enqueuedTimeUtc: 2020-02-21T11:30:32.294Z,
partitionKey: undefined,
systemProperties: {
'iothub-connection-device-id': 'qux',
'iothub-connection-auth-method': '{"scope":"device","type":"sas","issuer":"iothub","acceptingIpFilterRule":null}',
'iothub-connection-auth-generation-id': '637177867069071846',
'iothub-enqueuedtime': 1582284632134,
'iothub-message-source': 'Telemetry'
}
}
Событие Destination EventHub:
{
body: { foo: 'transformedBar' },
properties: undefined,
offset: '34',
sequenceNumber: 456,
enqueuedTimeUtc: 2020-02-21T11:30:33.256Z,
partitionKey: undefined,
systemProperties: undefined
}
Примечание. Мне известно, что я могу «обмануть» и прикрепить deviceId в теле нового события, но Мне нужно, чтобы это значение было чисто разделено в systemProperties
для дальнейшей обработки в дальнейшем.