微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Spring Reactive Redis:如果发布者或订阅者不在同一台机器上运行,PubSub将无法运行

如何解决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 举报,一经查实,本站将立刻删除。