sách gpt4 ai đã đi

Làm thế nào để chuyển đổi máy chủ/nhóm Redis trong Sidekiq?

In lại 作者:行者123 更新时间:2023-12-03 06:44:43 34 4
mua khóa gpt4 Nike

tôi cóapartment gem的 Multi-Tenancy Rails应用程序,我可以使用apartment-sidekiq在每个工作程序中成功切换数据库租户。但是,sidekiq worker 正在为所有租户使用相同的Redis服务器。我也想对Redis完全隔离。有没有一种方法可以使用sidekiq middeware为每个租户使用单独的Redis主机,而不会影响很多代码更改。
示例租户配置

 TENANT_POOL = {
tenant_1: ConnectionPool.new { Redis.new(url: ENV['REDIS_URL1']) },
tenant_2: ConnectionPool.new { Redis.new(url: ENV['REDIS_URL2']) }
}
例如。 worker
class SendMailWorker
include Sidekiq::Worker
def perform(args)
puts "In Worker Tenant: #{Apartment::Tenant.current}, #{Sidekiq.redis_pool.inspect}"
kết thúc
kết thúc
客户端中间件
class MyMiddleware::Client::ChangeRedisPool
def call(worker_class, job, queue, redis_pool)
#Can I change redis pool/client here to execute job in separate redis
năng suất
kết thúc
kết thúc
服务器中间件
class MyMiddleware::Server::ChangeServerRedisPool
def call(worker, job, queue)
#Can I change redis pool/client here to execute job in separate redis
năng suất
kết thúc
kết thúc
我知道我们可以使用特定的连接池执行工作程序,如下所示,但这最终将在每次sidekiq工作程序调用时更改代码。
 Sidekiq::Client.via(TENANT_POOL[:tenant_1]) { SendMailWorker.perform_async("d") } # run on tenant 1 sidekiq
Sidekiq::Client.via(TENANT_POOL[:tenant_2]) { SendMailWorker.perform_async("d") } # run on tenant 1 sidekiq
我们如何通过sidekiq和独立的Redis实现 Multi-Tenancy ?

1 Câu trả lời

您需要为每个Redis启动一个单独的Sidekiq进程。您的客户端可以像这样动态地定位Redis池:

SendMailWorker.set("pool" => POOLx).perform_async(...)
请查看Sidekiq::Client和Sidekiq::Worker的代码以获取详细信息。

关于ruby-on-rails - 如何在Sidekiq中切换Redis主机/池?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63020554/

34 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com