我有两个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缓存示例。
虽然订阅者没有收到信息是没有意义的,但我想知道,我在这里遗漏了什么吗?频道在其运行的网络上是否有任何限制?
1条答案
按热度按时间elcex8rz1#
好吧,这不完全是一个答案,但人们可能想知道,redis将“mychannel”和mychannel视为两个不同的频道-一个带引号,另一个不带引号。