首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在内部订阅spring-websocket消息

在内部订阅spring-websocket消息
EN

Stack Overflow用户
提问于 2014-07-17 04:13:08
回答 1查看 879关注 0票数 3

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

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

代码语言:javascript
复制
MessageSendingOperations<String> messagingTemplate = //...;
this.messagingTemplate.convertAndSend("/topic/data/1", message);

这个可以完美地工作。

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

MessageReceivingOperations看起来几乎像是要使用的工具,但它似乎只支持拉取消息。我更喜欢将消息推送到我的服务中。

SubscribableChannel.subscribe()看起来也很有前途,但是我怎么才能找到正确的通道呢?

我真的希望能够像这样的东西

代码语言:javascript
复制
messagingTemplate.subscribe("/topic/data/*", 
                            new MessageHandler<String>{
                                public void handleMessage(String s){
                                  // process message
                                }
                            });
EN

回答 1

Stack Overflow用户

发布于 2014-07-17 21:13:20

以下方法适用于我,但如果有更直接的方法就更好了:

代码语言:javascript
复制
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);
            }
        }
    });
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24789789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档