Spring Reactive Redis:如果发布者或订阅者不是来自同一台机器 运行,则 PubSub 无法工作

Spring Reactive Redis: PubSub does not work if the publisher or subscriber does not run from the same machine

我在两个不同虚拟网络上的两个不同虚拟机中有两个 spring 启动服务 运行。 一项服务 运行 开启并将通知推送到 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 视为两个不同的频道 - 一个带引号,另一个不带引号。