fix(iot): ReceivedAt в RFC3339Nano (порядок телеметрии, non-FIFO)
bridge пишет, consumer парсит RFC3339Nano (субсекундная точность). Раньше RFC3339 (секунды) + non-FIFO очередь → показания в одну секунду могли встать не в том порядке. Parse RFC3339Nano совместим со старыми RFC3339-сообщениями (доля секунды опциональна).
This commit is contained in:
@@ -54,7 +54,7 @@ func newMessageHandler(dispatcher *sqsDispatcher, log *slog.Logger) mqtt.Message
|
|||||||
DeviceID: deviceID,
|
DeviceID: deviceID,
|
||||||
Topic: topic,
|
Topic: topic,
|
||||||
Payload: rawPayload,
|
Payload: rawPayload,
|
||||||
ReceivedAt: time.Now().UTC().Format(time.RFC3339),
|
ReceivedAt: time.Now().UTC().Format(time.RFC3339Nano),
|
||||||
MessageID: uuid.NewString(),
|
MessageID: uuid.NewString(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,9 +46,11 @@ func processTelemetry(ctx context.Context, body string, store *iotpg.IoTPostgres
|
|||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
// Время приёма сохраняем в ts (порядок телеметрии). Битый/пустой received_at
|
// Время приёма сохраняем в ts (порядок телеметрии). RFC3339Nano — субсекундная
|
||||||
// → zero, стор подставит now().
|
// точность (очередь non-FIFO: несколько показаний в секунду не должны терять
|
||||||
receivedAt, perr := time.Parse(time.RFC3339, envelope.ReceivedAt)
|
// порядок). Parse RFC3339Nano принимает и старые RFC3339 (доля секунды опциональна).
|
||||||
|
// Битый/пустой received_at → zero, стор подставит now().
|
||||||
|
receivedAt, perr := time.Parse(time.RFC3339Nano, envelope.ReceivedAt)
|
||||||
if perr != nil {
|
if perr != nil {
|
||||||
receivedAt = time.Time{}
|
receivedAt = time.Time{}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user