2

Heroku でホストされる 2 つの Web アプリケーションがあります。1 つはフロントエンド アプリです。これは、消費者が直面するすべてのアクションがこのアプリを介して行われるという意味です。新しいサインアップなど。もう 1 つはバックエンドです。これは、新規顧客、その注文、および関連するビジネス ロジックのすべての処理を処理します。これらのアプリが互いに通信し、それらの間でデータを渡す必要があります。FE アプリだけが API を使用するため、BE アプリで API を作成したくありません。これは、他のユーザーが API にアクセスできないようにするためのセキュリティ ルールと制限の作成に時間を費やす必要があることを意味します。

私の質問は、代わりにそれらの間で共有メッセージング キューを使用できるかどうか、そしてこれは良いアイデアであったかどうか、そして Heroku で可能なことでしょうか? このユースケース用のアドオン/サービスはありますか? リストされているキューイング アドオンのほとんどは、同じアプリ内にワーカーとタスク クリエーターを持っています。

いずれにせよBEアプリには他のタスク用のキューが必要になるため、Sidekiqを可能性として検討してきました.これは良い候補のようですが、アプリ間で共有Redisインスタンスを提供したとしても、 、Sidekiq にはそれらの間でメッセージを渡す機能があります。誰でも知っていますか?

4

3 に答える 3

4

Heroku でAMQPを使用して、多くの成功を収めてきました。heroku プラグイン ( CloudAMQP )が利用可能で、AMQP の優れた Ruby サポートがあります。

一般的に、Heroku でのこのようなサービスのプロビジョニングに関しては、メインの Heroku アプリケーションでプラグインをプロビジョニングし、環境構成を他のアプリケーションと共有しています。

于 2013-01-10T23:24:44.047 に答える
1

Sidekiqは、あなたのような分散環境でうまく機能します。ジョブの処理に必要なすべての情報が1つのRedisサーバーに存在するため、任意のタイプのジョブで同じ数のサーバーを動作させることができます。

于 2013-01-12T02:13:01.083 に答える
0

各アプリケーションに独自の Redis 接続がある場合、別の接続を設定することで、あるアプリケーションから別の Sidekiq 環境にプッシュできます。

class RemoteWorker
  cattr_writer :client

  def self.push(worker_class_name, args, queue = 'default')
    client.push(
      'args' => [args],
      'class' => worker_class_name,
      'queue' => queue,
    )
  end

  def self.client
    @@client or raise 'Make sure to set client to Sidekiq::Client'
  end
end

次に、から構成しますconfig/initializers/remote_worker.rb

redis_config = YAML.load_file(Rails.root.join('config', 'redis.OTHER.yml'))[Rails.env]
redis = Redis.new(redis_config)
RemoteWorker.client = Sidekiq::Client.new(ConnectionPool.new{ redis })
于 2014-12-22T22:18:55.097 に答える