Понадобилось установить ActiveMQ взамен стандартного брокера в Spring. И здесь начались проблемы с Destination Name т.к ActiveMQ не будет работать с
/ Следовательно, что работало по пути
/topic/action/{actionId}
работать будет только так
/topic/action.{actionId}
Проблема в том что клиент - это Android приложение, и необходимо заставить всех юзеров это приложение переустановить. Есть более гуманный способ? Может можно указать в настройках Spring реврайтить некоторые адреса при запросах в ActiveMQ...
Код до боли стандартный
@Override
public void configureMessageBroker(final MessageBrokerRegistry config) {
config.
enableStompBrokerRelay("/topic").
setRelayHost("localhost").
setRelayPort(61613).
setSystemLogin("admin").
setSystemPasscode("password");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws")
.addInterceptors(new IpHandshakeInterceptor())
.setAllowedOrigins("*")
.withSockJS();
}
Вся обработка получения и рассылки соообщений подписчикам в этом методе
@MessageMapping("/action.{actionId}")
public void addMessage(SimpMessageHeaderAccessor sha, @DestinationVariable("actionId") String actionId, ChatMessage message) throws InterruptedException {
simpMessagingTemplate.convertAndSend("/topic/action." + actionId, message);
}