Spring веб-сокеты + ограничения Amazon MQ

Мы хотим использовать весенние веб-сокеты + STOMP + amazon MQ в качестве полнофункционального брокера сообщений. Мы пытались провести сравнительный анализ, чтобы выяснить, сколько клиентских подключений к веб-сокетам может обработать один узел tomcat. Но похоже, что сначала мы достигли лимита подключения amazonMQ. Согласно документации по AWS, amazonMQ имеет ограничение в 1000 подключений на узел (насколько я понимаю, мы можем попросить поддержку об увеличении лимита, но я сомневаюсь, что его можно увеличить в разы). Итак, мои вопросы:

1) Правильно ли я предполагаю, что для каждого соединения websocket от клиента к серверу spring / tomcat соответствующее соединение открывается от сервера к брокеру? Это правильное поведение или мы что-то делаем неправильно / что-то упускаем?

2) Что здесь можно сделать? Я имею в виду, что я не думаю, что это хорошая идея создавать узел брокера на каждые 1000 пользователей.


person Leffchik    schedule 25.11.2019    source источник


Ответы (1)


Согласно https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/messaging/simp/stomp/StompBrokerRelayMessageHandler.html вы делаете все правильно, и это задокументированное поведение.

Цитата из javadoc:

Для каждого нового сообщения CONNECT открывается независимое TCP-соединение с брокером и используется исключительно для всех сообщений от клиента, отправившего сообщение CONNECT. Сообщения от одного и того же клиента идентифицируются по заголовку сообщения идентификатора сеанса. И наоборот, когда брокер STOMP отправляет сообщения обратно по TCP-соединению, эти сообщения дополняются идентификатором сеанса клиента и отправляются обратно вниз по потоку через MessageChannel, предоставленный конструктору.

Что касается исправления, вы можете написать собственное реле брокера сообщений с пулом TCP-соединений.

person user1516873    schedule 25.11.2019