Это странное поведение, с которым я столкнулся при подписке на несколько тем с библиотекойact-stomp.
Переданные темы:
0: "/topic/settings/update"
1: "/queue/9999999999/notifications"
<SockJsClient
url={apiUrl}
topics={this.props.topics}
onMessage={this.onMessage}
ref={(client) => { this.clientRef = client; }}
debug
/>
(обратите внимание, что я не сначала не пропустите subseHeaders)
Я сохранил некоторые точки останова для отладки в react-stomp/dist/client.js
и stompjs/lib/stomp.js
, чтобы посмотреть, какие идентификаторы назначены этим подпискам.
This (Above image) это первый вызов в react-stomp/dist/client.js
для первого topi c. мы видим, что subscribeHeaders в this.props - не что иное, как пустой объект.
Это (над изображением) первый вызов функции подписки в stompjs/lib/stomp.js
, и мы получаем пустой объект в качестве аргумента заголовков.
(Это изображение выше) является вторым вызовом в react-stomp/dist/client.js
для второго топи c ( Обратите внимание, что на этот раз мы получаем подписные заголовки из ниоткуда )
Это (изображение выше) является вторым вызовом для подписки fn в stompjs/lib/stomp.js
для второй топи c: (Теперь у нас есть заголовки в параметрах, поэтому второе условие «если» будет ложным следовательно, присвоение того же идентификатора второму топи c также )
Эту всю странную проблему можно решить, передавая «subscribeHeaders = {null}», а затем каждую топи c начинает получать разные идентификаторы (то есть "sub-0", "sub-1")
<SockJsClient
url={apiUrl}
subscribeHeader={null} //only works when passed "null". Doesn't work if passed blank object "{}"
topics={this.props.topics}
onMessage={this.onMessage}
ref={(client) => { this.clientRef = client; }}
debug
/>