【问题标题】:How to create sharded-queue tube the right way?如何以正确的方式创建分片队列管?
【发布时间】:2020-09-25 14:08:54
【问题描述】:

假设我们有基于 Tarantool Cartridge 的服务,该服务存储用户发布的帖子。当用户发布新帖子时,它会被插入到相应的空间中。在分片队列管notify_friends中同时添加了通知用户朋友新帖子的任务。

问题是关于创建管notify_friends。最初我计划在服务角色的init() 方法中执行此操作,但它会导致错误,因为管创建修改了 clusterwide-config 并且在init() 运行时正在更改它。 我可以尝试在第一个任务添加请求时创建管,但不确定这是否是最好的方法。

【问题讨论】:

    标签: tarantool tarantool-cartridge


    【解决方案1】:

    你可以把它放到你应用的“默认配置”中。

    在这里查看: How to implement default config section for a custom Tarantool Cartridge role?

    【讨论】:

      【解决方案2】:

      我有两种方法:

      1. 根据您的建议在第一个请求上创建管。不会发生任何不好的事情。
      2. 如果你想提前做 - 在 init 函数中创建一个纤程,如果管子不存在,它会在初始化后 10 秒后尝试创建管子。您可以找出所有具有 sharded_queue 存储的实例,并仅在第一个实例上运行纤程(按实例 URI 的字母顺序排序)。

      【讨论】:

      • 你能解释一下第二个选项的第二部分吗?
      • 1.如何获取所有具有 sharded_queue 存储的实例?使用cartridge. rpc_get_candidates()cartridge.lua-api.get-topology() 或其他什么? 2.如何在第一个上运行光纤?检查当前实例是否是列表中的第一个?
      • 是的。您可以使用 rpc_get_candidates (tarantool.io/en/doc/latest/book/cartridge/cartridge_api/modules/…) 获取具有特定角色的实例列表,然后按 URI 对它们进行排序以找出谁是第一个。然后使用membership.myself().uri 获取您的uri,并将您从rpc_get_candidates 获得的内容与此值进行比较,以确定您是否是第一个。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-03
      • 2017-01-08
      • 1970-01-01
      • 2018-01-19
      • 1970-01-01
      • 2019-11-24
      相关资源
      最近更新 更多