Как зарегистрировать подписку на stomp в Spring

Я хочу контролировать подписку на топот в своем приложении Spring с помощью spring-messaging v.4.2. Это моя конфигурация приложения Spring для топать:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.myapp")
@EnableWebSocketMessageBroker
@EnableAsync
@EnableScheduling
public class Config extends AbstractWebSocketMessageBrokerConfigurer  {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/queue", "/topic");
        config.setApplicationDestinationPrefixes("/app");
        config.setUserDestinationPrefix("/user");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/pv").setAllowedOrigins("*");
    }

    @Bean
    public Executor taskExecutor() {
        return new SimpleAsyncTaskExecutor();
    }   

    @Bean 
    public MultipartResolver multipartResolver(){
        return new CommonsMultipartResolver();
    }
}

Как я могу написать метод, вызываемый для каждой подписки с путем и stompId в качестве параметров? Спасибо


person Tobia    schedule 27.11.2017    source источник


Ответы (1)


StompSubProtocolHandler вызывает соответствующие ApplicationEvent, когда это необходимо:

if (this.eventPublisher != null) {
    Principal user = getUser(session);
    if (isConnect) {
        publishEvent(this.eventPublisher, new SessionConnectEvent(this, message, user));
    }
    else if (StompCommand.SUBSCRIBE.equals(command)) {
        publishEvent(this.eventPublisher, new SessionSubscribeEvent(this, message, user));
    }
    else if (StompCommand.UNSUBSCRIBE.equals(command)) {
        publishEvent(this.eventPublisher, new SessionUnsubscribeEvent(this, message, user));
    }
}

Вся необходимая информация присутствует в файле message. См. StompHeaderAccessor API, как получить необходимую информацию STOMP из заголовков сообщений по этому вопросу.

person Artem Bilan    schedule 27.11.2017