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,
|
||||
Topic: topic,
|
||||
Payload: rawPayload,
|
||||
ReceivedAt: time.Now().UTC().Format(time.RFC3339),
|
||||
ReceivedAt: time.Now().UTC().Format(time.RFC3339Nano),
|
||||
MessageID: uuid.NewString(),
|
||||
})
|
||||
}
|
||||
|
||||
@@ -46,9 +46,11 @@ func processTelemetry(ctx context.Context, body string, store *iotpg.IoTPostgres
|
||||
}
|
||||
return err
|
||||
}
|
||||
// Время приёма сохраняем в ts (порядок телеметрии). Битый/пустой received_at
|
||||
// → zero, стор подставит now().
|
||||
receivedAt, perr := time.Parse(time.RFC3339, envelope.ReceivedAt)
|
||||
// Время приёма сохраняем в ts (порядок телеметрии). RFC3339Nano — субсекундная
|
||||
// точность (очередь non-FIFO: несколько показаний в секунду не должны терять
|
||||
// порядок). Parse RFC3339Nano принимает и старые RFC3339 (доля секунды опциональна).
|
||||
// Битый/пустой received_at → zero, стор подставит now().
|
||||
receivedAt, perr := time.Parse(time.RFC3339Nano, envelope.ReceivedAt)
|
||||
if perr != nil {
|
||||
receivedAt = time.Time{}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user