gpt4 book ai didi

spring - 内部订阅 spring-websocket 消息

转载 作者:行者123 更新时间:2023-12-05 01:20:54 26 4
gpt4 key购买 nike

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

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

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

这非常有效。

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

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

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

我真的很想调用类似的东西

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

最佳答案

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

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);
}
}
});
}

关于spring - 内部订阅 spring-websocket 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24789789/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com