メッセージの整合性と信頼性の高いトランスポートを提供するため、専用のキューイング プラットフォームを使用することをお勧めします。さらに、十分に大きなアプリケーションの場合、メッセージングはスケーラビリティの大きな鍵となります。本当に最初から自分で焼く必要がある場合は、Celluloid ライブラリを使用してスレッド管理を処理し、固定のキュー制限ではなく時間ベースの遅延を使用することをお勧めします。
また、アプリを強制終了したとき (デプロイなど) にキューにあったものはすべて失われます。これを行う 1 つの方法の大まかな実装を次に示します。
class MetricReporter
include Celluloid
def initialize
@queue = Queue.new
end
def enqueue(metric)
@queue << metric
empty! if @queue.length > 50
end
def empty!
until queue.length.zero?
metric = @queue.pop
#process metric
end
end
end
これは非常に簡単に使用できます。イニシャライザで MetricReporter のインスタンスを作成し、それにメトリクスをエンキューするだけです。
config/initializers/mymetrics.rb
METRIC_REPORTER = MetricReporter.new
アプリ/モデル/myuser.rb
def login
METRIC_REPORTER.enqueue({:action => 'User Logged In', :data => username})
end