РАЗЪЯСНЕНИЯ:
Благодаря комментарию @JustinBertram я понял, что этот вопрос не имеет смысла.
Протокол STOMP сам по себе не поддерживает селекторы, вам нужно использовать таких брокеров, как ActiveMQ, которые его реализуют . STOMP поддерживает заголовки, которые могут использоваться брокерами для фильтрации сообщений по селекторам.
В моем случае я не использую никакого брокера, просто веб-интерфейс с Angular + Stomp + SocksJS и бэкэнд с Spring Boot, поэтому я не могу использовать селекторы.
Документация по протоколу STOMP не дает мне этого понять, и я запутался. Смотрите эти ссылки:
спецификация :
Брокеры Stomp могут поддерживать заголовок селектора, который позволяет вам
укажите селектор SQL 92 в заголовках сообщений, который действует как
фильтр для контентной маршрутизации.
эта статья :
Метод subscribe () принимает необязательный аргумент headers для указания
дополнительные заголовки при подписке на пункт назначения:
var headers = {ack: 'client', 'selector': "location = 'Europe'"};
client.subscribe("/queue/test", message_callback, headers);
Клиент указывает, что он обработает подтверждение сообщения
и заинтересован в получении только сообщений, соответствующих селектору
location = 'Европа'.
Я реализую бэкэнд в Spring Boot. Для двусторонней связи с внешним интерфейсом я использую stomp over websockets.
Я следовал этому Spring Boot + угловой пример
Это работает, но одно из моих требований заключается в том, что бэкэнд должен отправлять сообщения с селекторами, чтобы веб-интерфейс подписывался на тему и получал только отфильтрованные данные , чтобы избежать проблем производительности с данными в реальном времени .
т.е. { 'selector': "location = 'Europe'" }
Для этого я пытаюсь заставить бэкэнд отправлять сообщения с селекторами, но не могу заставить его работать.
Я следовал этой статье , чтобы реализовать интерфейс с селекторами, и он работает правильно, проблема только в бэкэнде .
Я пробовал с @SendTo
аннотацией, но, похоже, для этого нет никаких параметров, как в статье:
@MessageMapping("/hello")
@SendTo("/topic/greetings")
public Greeting greeting(HelloMessage message) throws Exception {
Thread.sleep(1000);
return new Greeting("Hello, " + HtmlUtils.htmlEscape(message.getName()) + "!");
}
Также я пытался с MessagingTemplate
, но я не знаю, как установить свойства селектора в заголовке:
http://assets.spring.io/wp/WebSocketBlogPost.html
MessageSendingOperations<String> messagingTemplate;
messagingTemplate.convertAndSend(destination, quote);
Я действительно ценю любую помощь, я прочитал много статей и документов, но я не нахожу ничего особенного, говорящего об этом с решением.