gpt4 book ai didi

java - Spring 数据 Redis Pub/Sub 和 Websockets : recieving messages

转载 作者:行者123 更新时间:2023-12-01 13:46:59 25 4
gpt4 key购买 nike

我正在为我的 Web 应用程序使用 Spring Boot 和 Redis 服务器。当客户端发送帖子时,会在“聊天” channel 上向 Redis 发送一条消息。这很好用。为了接收消息,我创建了类 RedisMessageSubscriber,它接收来自 Redis 的消息。
所有客户端都订阅了 STOMP Websocket 客户端“主题/测试”。

我的问题是:如何将我在 RedisMessageSubscriber 中收到的消息重定向到客户端 Websocket channel ?

我在下面的第一次尝试没有成功,因为 Controller 在从 Redis 收到消息之前从队列向客户端发送了一条消息。

DwittrController.class(消息在这里发送给客户端):

@MessageMapping("/newPost")
@SendTo("/topic/test")
public Message message(ClientMessage message) {
log.debug("a message from client was recieved");
userRepository.sendMessage(message.getMessage());
String redisMessage = RedisMessageSubscriber.messageList.get(0);
RedisMessageSubscriber.messageList.remove(0);
return new Message("New post from " + redisMessage + " is available.");
}

UserRepositoryImpl.class:
public void sendMessage(String message) {
stringRedisTemplate.convertAndSend("chat", message);
}

RedisMessageSubscriber.class:
@Component
public class RedisMessageSubscriber implements MessageListener {

private final Logger log = LoggerFactory.getLogger(this.getClass());

public static List<String> messageList = new ArrayList<String>();

public void onMessage(Message message, byte[] pattern) {
messageList.add(message.toString());
log.debug("Message received: " + message.toString());
}

}

最佳答案

在您的 RedisMessageSubscriber 类中,您可以 Autowiring SimpMessagingTemplate。代码示例并不精确,但您明白了。

@Component
public class RedisMessageSubscriber implements MessageListener {

private final Logger log = LoggerFactory.getLogger(this.getClass());

public static List<String> messageList = new ArrayList<String>();

@Autowired
SimpMessagingTemplate messagingTemplate;


public void onMessage(Message message, byte[] pattern) {
messageList.add(message.toString());
log.debug("Message received: " + message.toString());
messagingTemplate.convertAndSend( "/topic/test", message);
}

}

关于java - Spring 数据 Redis Pub/Sub 和 Websockets : recieving messages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48427052/

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