Я использую Spring для настройки сервер Stomp конечных точек (проходящее AbstractWebSocketMessageBrokerConfigurer)Использования RabbitMQ педали эффектов адаптера для передачи сообщения через подписки на разных серверах
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableStompBrokerRelay("/topic","/queue")
.setRelayHost(<rmqhost>);
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/myapp/websockets").setAllowedOrigins("*");
}
Цель состоит в том, что я могу иметь несколько серверов, и клиент будет подключаться любой из них для конкретной темы:/тема/тема-ID-1
любых из сервера (в то время) может отправить сообщение по этой теме с использованием Spring в SimpMessagingTemplate
messagingTemplate.convertAndSend(destination, message);
где пункт назначения = "/ topic/topic-id-1". Например: у меня есть 2 серверных узла и клиент, подключающийся к каждому из них, подписываясь на одну и ту же тему (/ topic/topic-id-1). Цель состоит в том, что если сервер 1 отправляет сообщение для темы-id-1, он должен передать через rabbitmq оба клиента, подписывающихся на ту же тему. Я вижу, что очередь создается с ключом маршрутизации как «topic-id-1», но только клиент, подключающийся к серверу, отправляющий сообщение, явно принимает его. Я что-то упустил? Разве брокер RMQ stomp не должен передавать сообщение, отправленное одним сервером для подписки, во всех подписках на ту же тему? Нужно ли серверу делать что-то еще, чтобы получать сообщения, отправленные другим узлом?