2.6 KiB
2.6 KiB
WebSocket Connection Improvements for InsigniaRequestProcessService
???????????????????
1. ????????? Configuration
- ?????
WebSocketConfigurationclass ????????????????????? - ?????????????????????? ???? appsettings.json
- ?? default values ???????????????????????
2. ??????????????????????? WebSocket
- ???
ImmutableList.Create()?????? Transports - ????? event handlers ????????????????????????
- ?????? reconnection ?????????
- Thread-safe ???? lock mechanism
3. ??????????????? Logging
- ???
ILogger<T>??? Console.WriteLine - ????? emoji ??????????????? log ???????????
- Log ??????????????????????????
4. ???????????????????
- Proper exception handling ????????
- Graceful handling ??? cancellation
- Delay ??????????????????????????????? busy loop
5. ????????????????? Notification
- ???????????????????????????????
- ????????????????????????????????
- ??????????? retry ?????????
?????????
???????????? appsettings.json
{
"WebSocket": {
"Url": "https://bma-ehr.frappet.synology.me",
"Path": "/api/v1/org-socket",
"DefaultUserId": "4064c2b2-0414-464a-97c6-4a47c325b9a3",
"ReconnectionDelay": 1000,
"ReconnectionAttempts": 5,
"Timeout": 20000,
"AutoReconnect": true,
"TaskDelayOnError": 5000
}
}
Log Messages ????????
- ?? = Service started
- ?? = Task processing
- ? = Success operations
- ? = Error/Failure
- ?? = Reconnection attempts
- ?? = WebSocket notifications
- ?? = Service stopping
???????????????????
- Reliability: ???????????? WebSocket ???????????????????
- Observability: ???????????? log ???????
- Configurability: ??????????????????????? configuration
- Maintainability: ???????????????????????? ??????????
- Resilience: ?????????????????????????
WebSocket Events ?????????
EVENT_CONNECT: ???????????????EVENT_DISCONNECT: ????????????????EVENT_ERROR: ????????????????EVENT_CONNECT_ERROR: ????????????????????????EVENT_RECONNECT: ???????????????????EVENT_RECONNECT_ERROR: ????????????????????????????EVENT_RECONNECT_FAILED: ?????????????????????????
Message Format ??????????? WebSocket
{
"success": true/false,
"message": "Task Finish" ???? "Task Failed",
"payload": {
"completedAt": "timestamp",
"taskType": "insignia_background_processing",
"duration": 1234.56, // milliseconds
"status": "success" ???? "failed"
// ?????????? error ???? error ??? stackTrace ?????
}
}
???????? user data:
{
"userId": "4064c2b2-0414-464a-97c6-4a47c325b9a3"
}