Получите клиент Stomp для внутреннего использования Spring Broker Relay - PullRequest
2 голосов
/ 20 января 2020

Я пытаюсь настроить брокерское реле весной, когда RabbitMQ является брокером. Когда все события происходят из моего браузера, все работает так, как задумано, однако иногда у меня есть события, генерируемые на стороне сервера динамически. Я тоже хочу отправить их в RabbitMQ, чтобы воспользоваться такими вещами, как длительные темы или TTL для сообщений. Насколько я понимаю, использование SimpleMessagingTemplate.convertAndSend() и convertAndSendToUser приводит к отправке события в браузер вместо брокера.

На данный момент я пытаюсь создать новый клиент stomp для rabbitmq и отправлять через него события. Но я не могу не чувствовать, что это немного хакерски. Есть ли способ завладеть клиентом Stomp, используемым Spring, и легко пересылать мои сообщения? Или я что-то здесь упускаю?

Любая помощь приветствуется, спасибо!

1 Ответ

0 голосов
/ 22 января 2020

Это заняло некоторое время, но оказалось, что вам не нужно связываться с внутренним клиентом Stomp (хотя на самом деле это внутренний TcpClient от Reactor Netty) или чем-то подобным. Ниже приведены шаги, которые необходимо выполнить, если вы хотите немного настроить:

  • Spring использует @EnableWebSocketMessageBroker для настройки посредника, или вы можете расширить DelegatingWebSocketMessageBrokerConfiguration. Я закончил расширять его, хотя это мало что меняет.
  • В configureMessageBroker(MessageBrokerRegistry registry) используйте реестр и включите реле Stomp и важную часть: для реестра в том же методе добавьте ChannelInterceptors , Вы можете получить команду stomp и обработать ее по мере необходимости. Идея идентична Spring Intercetpors. Добавьте в него необходимые заголовки.

    final StompHeaderAccessor headerAccessor = StompHeaderAccessor.wrap (message); StompCommand command = headerAccessor.getCommand ();

Затем, наконец, заново создайте сообщение для отправки.

MessageBuilder.createMessage(new byte[0], accessor.getMessageHeaders());

Наконец, вы можете проверить, действительно ли что-то происходит Консоль управления RabbitMQ для наблюдения за отправкой сообщений.

...