如何解决Spring Reactive Redis:如果发布者或订阅者不在同一台机器上运行,PubSub将无法运行
我有两个在两个不同虚拟网络上的两个不同VM中运行的spring boot服务。 一种服务在运行,并将通知推送到Azure RediscCache中的通道。
Optional<Long> hasMessageSent = redisStringTemplate.convertAndSend(syncQueue,GSON.toJson(data))
.onErrorReturn(-1L).blockOptional(Duration.ofMinutes(BLOCK_MINUTES));
if (!hasMessageSent.isPresent() || hasMessageSent.get() < 0) {
LOG.warn("Unable to send the sync message.");
return false;
}
public void subscribertochannel() {
LOG.debug("Subscribing to channel " + syncQueue);
redistemplate.listentochannel(syncQueue).name("SYNCQUEUER").doOnNext(msg -> {
LOG.debug("New message received: '" + msg.toString());
buildOrUpdateNotifications(getNotification(msg.getMessage()));
}).doOnError(e -> LOG.error("Error while listening at the channel,will continue.",e)).subscribe();
}
如果发布者和订阅者都在同一台计算机上运行,则上述设置可以正常工作。 当我将发布者即第一项服务移至VM时;用户,即第二服务已停止接收消息。
我从redis控制台中可以看到,发布者确实将消息推送到频道,但订阅者没有收到消息。
我可以确认在所有情况下,发布者和订阅都连接到相同的Azure Redis缓存实例。
尽管我想知道订户不接收消息是没有道理的,但是我这里缺少什么吗?频道对其运行的网络有任何限制吗?
解决方法
好吧,这不是一个确切的答案,但是您可能想知道Redis将“ mychannel”和mychannel视为两个不同的通道-一个带引号的通道,另一个带不带引号的通道。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。