首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Coding
V2EX  ›  Java

请教一个消息队列方案

  •  
  •   yxjn · 199 天前 · 2591 次点击
    这是一个创建于 199 天前的主题,其中的信息可能已经有所发展或是发生改变。

    该系统是一个上游系统,有个需求,需要同步消息到下游服务,下游服务有很多,功能一样,拥有的权限不一样。 每个下游服务需要同步的信息不一样,即上游要分好权限,同步不同的信息给下游。 比如说 A 机器需要 i 信息,B 机器需要 j 信息,C 机器需要 ij 信息。

    问题是,如果想用 mq 的方案,怎么实现。比如说 kafka,每个机器分一个 topic 性能是不是难以保证,因为下游服务数量可能成百上千。

    另外,如果新加一个机器,需要全量同步之后再用 mq 同步,是不是也不好做,现在没想出什么方案可以解决初始化全量的问题。

    20 回复  |  直到 2019-05-30 12:17:16 +08:00
        1
    lecher   199 天前
    考察一下 pulsar 这类的支持订阅多个主体、支持权限的 MQ ?
        2
    petelin   199 天前   ♥ 1
    kafka, 创建不同的 topic, 然后每个 topic 创建多个 Partition 就行了

    初始化全量更新, 可以将这些数据先写到流里.
        3
    mooncakejs   199 天前
    支持 tag 的消息队列
        4
    j2gg0s   199 天前
    RabbitMQ 会更适合
        5
    dawncold   198 天前
    告诉下游哪些数据有变更让他们来取?
        6
    CoderGeek   198 天前
    zk ? 订阅和发布注册监听的意思吗? pull 还是 push
        7
    CoderGeek   198 天前
    消息队列只是其中一个 还需要其他辅助的实现把
        8
    ysweics   198 天前 via iPhone
    用队列通知下游说权限更新了,下游收到消息自己去接口里面拉权限,不一定非要在队列消息里面把权限信息给过去
        9
    axbx   198 天前
    用 rabbitmq 吧 支持模式匹配
        10
    yxjn   198 天前
    @petelin 下游成百上千个机器,每个机器拥有的权限可能不相同,而且会经常变化。按照 topic 区分的话,担心 topic 过多会影响性能。而且同样的信息发给多个 topic (按权限区分)效率也不高。
        11
    yxjn   198 天前
    @j2gg0s @axbx rabbitmq 用的不多,我再看下。能再详细说下么。
        12
    yxjn   198 天前
    @ysweics 这样可能也有同样的问题,下游是多个服务,我怎么精确的把权限通知到下游。
        13
    yxjn   198 天前
    @mooncakejs rocketmq 似乎可行,不知道 tag 很多的时候会不会有性能影响,我再看下。
        14
    petelin   198 天前
    @yxjn 不太懂为什么同样的消息要按照不同的权限区分.我的理解同一中消息就应该放在同一个 topic 里, 然后客户端权限验证可以走别的,比如接口鉴权, 发现自己没有读对应消息权限之后, 就不要在消费了. 发现有了新权限, 就开始消费.
        15
    yxjn   198 天前
    @petelin 需求决定的,:-D 下游只需要拥有权限的信息。
        16
    luozic   198 天前
    @lecher pulsar 出錢的基本的定制需求還是有的;又免費,又要求一堆增值功能的,呵呵呵呵。
        17
    lihongjie0209   198 天前
    你解决了全量初始话的问题的话记得去 redis 提交一个 pr, redis 主从就是这么干的.
        18
    ysweics   198 天前
    @yxjn 那你的问题就是怕消息发送出去以后,下游的服务的应用没有收到信息,或者消费失败,那个可以通过分布式消息一致性的方案来解决,这个就能监控到具体的消费流程了
        19
    yxjn   198 天前
    @ysweics 不是这个问题,是如何分好权限,并通过 mq 精准的推到不同的服务上。
        20
    ysweics   198 天前
    @yxjn 那就是根据上面 V 友提供的方案,可以用模式匹配,你设计的思路只是把消息推送过去,然后下游消费,上游不用管。(我在开始回答的里面想的是我自己想的第二个方案,开始发送的时候,不用管模式匹配的问题,直接一个更新的命令发给所有的服务,然后服务统一到一个权限接口里面去请求,然后逻辑处理 ,相当于你的更新是推的逻辑,我这边想的拉的逻辑)
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2326 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 24ms · UTC 12:57 · PVG 20:57 · LAX 04:57 · JFK 07:57
    ♥ Do have faith in what you're doing.