2011-07-18 18 views
1

私はレールアプリケーションで非同期的に少量のコードを実行したいと思います。コードは既知の情報を記録します。このタスクは、私のアプリケーションからの残りの応答をブロックしないようにしたいと思います。操作は非常に軽量であり、遅延ジョブとして実行されることが頻繁です。非常に少量のコードを非同期で実行するには?

私はちょうど使用することを考えています:

Thread.new do 
    # my logging code 
end 

をし、一日を呼び出します。これは私が達成したいものを達成していますか?何か欠点はありますか?

答えて

0

いくつかのベースラインリソース競合事象の処理以外にも、これで十分です。データベースリソースは、そこにログオンしている場合は気になります。そこにログオンしている場合はファイルです。しかし、基本的なアプローチは私が考えるとうまくいきます。より簡単です...

+0

@要旨では、上記のすべてのテクノロジへのリンクを公開してきましたが、メインではないので、これが私の最初の投稿です2つの結果スレッド間でIO競合が発生しないようにする必要があります。 –

+0

2つのログスレッドをデータベースに書きたいとは思わないでしょうか?主なものではなく、ロギングDBです。とにかく、あなたは正しい道にいるようです。 – jaydel

+0

いいえ、複数のロギングスレッドがありますが、ロギングスレッドとメインアプリスレッドは決して同じIO依存性を持ちません。 –

1

あなたの特定の用途には余計かもしれませんが、STOMP、AMQP、OpenWire、またはJabberなどのメッセージキューミドルウェアを使用することを検討しましたか?

基本的なアウトライン(擬似コードは!)のようになります。あなたは、ファイルにログメッセージを記述したメッセージキューのもう一方の端に少なくとも1つの「消費者」を持っているでしょう

s = client.create_connection(user,pass,server_ip,port) 
s.message_send("Log Message Goes Here") 

/データベース/チャットルーム/ IRCチャンネル/あなたが望む、本当にすべてのコード... :)

これは、将来的に高輝度処理ジョブをハンドオフしたい場合たとえば、請求書の生成)、そのためのインフラストラクチャーを既に用意しています。

本当に簡単なメッセージングサーバーを探しているなら、私はRabbitMQをお勧めします。これはErlangで書かれていますが、セットアップが非常に簡単です。

私は任意の二つ以上のリンクを投稿することはできませんが、私はhttps://gist.github.com/1090372それがDBにアクセス

関連する問題