reactive-redis:如果发布服务器或订阅服务器不是从同一台机器上运行的,那么pubsub就不能工作

6gpjuf90  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(505)

我有两个spring引导服务在两个不同虚拟网络上的两个不同vm中运行。一个服务运行在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();

}
如果在同一台机器上运行publisher和subscriber,则上述设置可以正常工作。当我将发布服务器(即第一个服务)移动到虚拟机时;例如,第二个服务已停止接收消息。
我可以从redis控制台看到,publisher确实在将消息推送到通道中,但是订阅者没有接收到消息。
我可以确认在所有场景中,publisher和subscribe都连接到同一个azureredis缓存示例。
虽然订阅者没有收到信息是没有意义的,但我想知道,我在这里遗漏了什么吗?频道在其运行的网络上是否有任何限制?

elcex8rz

elcex8rz1#

好吧,这不完全是一个答案,但人们可能想知道,redis将“mychannel”和mychannel视为两个不同的频道-一个带引号,另一个不带引号。

相关问题