【问题标题】:Subscribing to spring-websocket messages internally在内部订阅 spring-websocket 消息
【发布时间】:2014-09-07 12:18:52
【问题描述】:

我正在使用 spring-websocket 将消息推送到浏览器客户端。

我的设置与the portfolio example 中的设置几乎相同,我使用MessageSendingOperations 发送消息:

MessageSendingOperations<String> messagingTemplate = //...;
this.messagingTemplate.convertAndSend("/topic/data/1", message);

这很好用。

但我也希望能够在内部订阅相同的消息。

MessageReceivingOperations 看起来几乎可以使用,但它似乎只支持拉消息。我更希望将消息推送到我的服务。

SubscribableChannel.subscribe() 看起来也很有希望,但我如何获得正确的频道?

我真的很希望能够调用类似的东西

messagingTemplate.subscribe("/topic/data/*", 
                            new MessageHandler<String>{
                                public void handleMessage(String s){
                                  // process message
                                }
                            });

【问题讨论】:

    标签: spring spring-websocket spring-messaging


    【解决方案1】:

    以下内容对我有用,但如果有更直接的方法会更好:

    public interface MessageHandler<T> {
        public void handleMessage(T message);
    }
    
    @Autowired
    private AbstractSubscribableChannel brokerChannel;
    
    private PathMatcher pathMatcher = new AntPathMatcher();
    
    private <T> void subscribe(final String topic, final Handler<T> handler, final Class<T> messageClass){
        brokerChannel.subscribe(new MessageHandler() {
            @Override
            public void handleMessage(Message<?> message) throws MessagingException {
                SimpMessageHeaderAccessor headers = SimpMessageHeaderAccessor.wrap(message);
                final String destination = headers.getDestination();
                if(pathMatcher.match(topic, destination)) {
                    final T messageObject = (T) messageConverter.fromMessage(message, messageClass);
                    handler.handleMessage(messageObject);
                }
            }
        });
    }
    

    【讨论】:

    • 嗨,我也需要这个功能。你能展示你的类的实际使用情况吗?
    猜你喜欢
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 2021-12-19
    相关资源
    最近更新 更多