Spring websocket从异步方法发送消息

时间:2016-03-02 14:41:05

标签: spring spring-mvc stomp spring-websocket sockjs

我正在使用带有sockjs和stomp的spring websocket 4.2.4,我正试图从服务器向异步任务中的所有订阅者发送消息,但没有运气

我的课程是:

public class MyClass{
    private timer;
    public MyClass(){
        this.timer = new Timer();
    }

    @Async
    public void myMethod(){
        timer.schedule(new MyReminder(), 1000);
    }

    @Async
    private class MyReminder extends TimerTask{

        @Autowired
        SimpMessagingTemplate messageingTemplate;

        @Override
        public void run(){
            messageingTemplate.convertAndSend("/app/subscribers","message");
        }
    }
}

但订阅者没有收到消息

任何帮助?我做错了什么:(

*编辑*

我的消息经纪人:

public void configureMessageBroker(MessageBrokerRegistry config){ 
    config.enableSimpleBroker("/topic","/myApp"); 
    config.setApplicationDestinationPrefixes("/myApp");
}

当我订阅时:

subscribe("myApp/someRoute") 

谢谢!

**编辑2:**

感谢我帮助解决问题:)

1 个答案:

答案 0 :(得分:0)

你可以通过经纪人目的地来做到这一点。

请分享您的AbstractWebSocketMessageBrokerConfigurer

通常我们这样做:

public void configureMessageBroker(MessageBrokerRegistry registry) {
    registry.setApplicationDestinationPrefixes("/app/")
            .enableSimpleBroker("/queue/", "/topic/");
}

所有/app/个目的地都不会被经纪人处理。只有@SubscribeMapping - 来自客户端计划的请求 - 回复方案,您才可以订阅它们。

根据STOMP,您的任务完全适合发布 - 订阅故事 - topic

此外,您的订阅者(客户)应该订阅代理上的某个主题,之后您只需向其发送消息即可。