через envoy идёт в нужный инстанс WSAPP.
Есть множество других сервисов, которые хотят отправить WSCLIENT сообщение, с WSAPP они общаются через rabbitmq, как можно организовать роутинг, чтобы сторонний сервис знал в какой инстанс WSAPP слать сообщение?
И WSAPP и сторонние сервисы знаю userId WSCLIENT.
Я знаю пару подходов для таких случаев:
1. Динамические очереди(или routing key), на каждый ws коннекшн создаёшь новую очередь с routing key = userId, и роутинг реббита делает своё дело
2. Сервис-прослойка который хранит в БД какой инстанс с каким userId держит коннекшн
У обоих подходов есть свои недостатки.
Может кто-то сталкивался с подобным и знает элегантное решение?
в смысле не ответ на какое-то полученное сообщение, а просто какой-то сервис шлет новое и надо чтобы его обработал именно нужный инстанс ? если не хочется тащить кафку, то можно вместо очереди использовать топики. каждый инстанс читает сообщение и решает, можно ли ему его процессить.
Да, всё верно, тут нужно чтобы какой-то сервис отправил сообщение и его обработал нужный инстанс. Да, идею с топиком понял, спасибо
Тут видится 1 недостаток, что если инстанс1 WSAPP упал, все клиенты попытаются сделать реконнект к другому инстансу, и если в этот момент будет сообщение в очереди то все инстансы WSAPP его скипнут потому что ещё нигде не зареган userId. Подумаю над этим
а тут всегда будет какой-то трейдофф. надо будет или решать проблему потерянных сообщений. или проблему с задвоением. или платить перфомансом, если например заиспользовать распределенные транзакции
Обсуждают сегодня