【问题标题】:MultiPublisher-MultiConsumer Queue using Redis使用 Redis 的 MultiPublisher-MultiConsumer 队列
【发布时间】:2020-01-31 03:40:20
【问题描述】:
  1. 我有多个监控服务MonSvc(1..N) 检测更改并发布这些更改。
  2. 我有多个服务在这些更新上运行(例如LoggerSvc & Enforcement-Svc

    注意:消费者服务需要所有更新,不能错过更新。

我正在使用 Redis 作为我的协调器(代理),但我对如何实现它有点困惑。

选项 1:每个 MonSvc# 将更新发布到 Redis Channel,同时监控服务订阅
这种设计失败是因为如果消费者服务出现故障,它可能会错过以后无法检索的更新

选项 2:每个 MonSvc# Enqueue 更新到 Redis List(Queue),而 Consumers 从队列中获取元素
消费者不会获取所有更新,但每个更新都会获得部分列表。

方案三:每个 MonSvc# Enqueue 更新到多个 Redis Lists(Queues)(队列/消费者),而消费者从队列中取元素
这工作正常,但似乎扩展性很差(MonSvc# 需要知道它发布给谁 + 多少)

如何使用 Redis 实现 “多发布者 >> 多消费者队列”(或者我应该使用更强大的代理?)

【问题讨论】:

    标签: redis queue microservices message-queue


    【解决方案1】:

    您正在寻找 Redis 5.0 中引入的具有消费者组的 Redis 流。见这里:https://redis.io/topics/streams-intro

    有一个很好的免费course for this is Redis University,推荐。

    使用 Redis Streams,您可以实现所需的至少一次交付语义。

    查看关键消费者组命令:

    • XGROUP 用于创建、销毁和管理消费者组。
    • XREADGROUP 用于通过消费者组从流中读取。
    • XACK 是允许消费者将待处理消息标记为已正确处理的命令。

    【讨论】:

    • 看起来很有希望,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 2020-03-25
    • 2014-12-04
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多