問題タブ [activemessaging]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
1757 参照

ruby-on-rails - Rails で大量の非同期 IO バウンド操作を実行する

私は定期的に多数の IO バインド操作を実行する必要がある Rails アプリケーションに取り組んでいます。これらの操作は非同期で実行できます。たとえば、システムは 1 日に 1 回、ユーザーごとに Salesforce.com にクエリを実行して、追跡しているユーザーの現在のアカウント (会社) のリストを取得する必要があります。これにより、膨大な数 (潜在的に > 100k) の小さなクエリが発生します。

私たちの現在のアプローチは、ActiveMessaging で ActiveMQ を使用することです。各ユーザーは、異なるメッセージとしてキューにプッシュされます。次に、コンシューマーはユーザーをキューから引き出し、Salesforce.com にクエリを実行し、結果を処理します。しかし、このアプローチはひどいパフォーマンスをもたらします。1 つのポーラー プロセス内では、一度に 1 人のユーザーしか処理できません。したがって、Salesforce.com クエリはシリアル化されます。文字通り何百ものポーラー プロセスを実行しない限り、ポーラーを実行しているサーバーを飽和状態に近づけることはできません。

代替手段として EventMachine を検討しています。これには、単一の EventMachine プロセス内で多数の Salesforce.com クエリを同時に開始できるという利点があります。そのため、サーバーの優れた並列処理と使用率が得られます。

しかし、EventMachine には 2 つの問題があります。1) ActiveMQ/ActiveMessaging で得られた信頼性の高いメッセージ配信が失われます。2) EventMachine を定期的に再始動して、メモリー増加の影響を軽減することは容易ではありません。たとえば、ActiveMessaging では、1 日に 1 回ポーラーを再起動する cron ジョブがあり、これはメッセージを失うことを心配することなく実行できます。しかし、EventMachine では、プロセスを再開すると、進行中の何百ものメッセージが文字どおり失われる可能性があります。これを回避できる唯一の方法は、EventMachine の上に持続性と信頼性の高い配信レイヤーを構築することです。

誰もがより良いアプローチを持っていますか? 大量の非同期 IO バウンド操作を確実に実行するための最良の方法は何ですか?

0 投票する
2 に答える
1934 参照

ruby - stomp および activemq.prefetchSize=1 を使用した activemessaging

Q1 と Q2 の 2 つのキューを持つ単一の activemq ブローカーがある状況があります。Activemessaging を使用する 2 つの Ruby ベースのコンシューマがあります。それらをC1とC2と呼びましょう。両方のコンシューマーが各キューをサブスクライブします。各キューにサブスクライブするときに activemq.prefetchSize=1 を設定しています。ack=client も設定しています。

次の一連のイベントを検討してください。

1) 長時間実行ジョブをトリガーするメッセージがキュー Q1 にパブリッシュされます。これを M1 と呼びます。

2) M1 がコンシューマー C1 にディスパッチされ、長い操作が開始されます。

3) 短いジョブをトリガーする 2 つのメッセージがキュー Q2 に発行されます。これらを M2 および M3 と呼びます。

4) M2 は C2 にディスパッチされ、C2 は短時間のジョブを迅速に実行します。

5) C1 がまだ M1 を実行しているにもかかわらず、M3 が C1 にディスパッチされます。prefetchSize=1 が接続ではなくキュー サブスクリプションに設定されているため、C1 にディスパッチできます。したがって、Q1 メッセージが既にディスパッチされているという事実は、1 つの Q2 メッセージのディスパッチを停止しません。

activemessaging コンシューマーはシングルスレッドであるため、最終的には、C1 が M1 の処理を​​完了するまで、M3 は長時間 C1 を待機します。そのため、コンシューマー C2 がアイドル状態であるにもかかわらず (メッセージ M2 ですぐに終了するため)、M3 は長時間処理されません。

基本的に、Q1 の長いジョブが実行され、Q2 の短いジョブが大量に作成されると、Q2 の短いジョブの 1 つだけがコンシューマーでスタックし、Q1 の長いジョブが完了するのを待機します。

サブスクリプション レベルではなく接続レベルで prefetchSize を設定する方法はありますか? M1 を処理している間、C1 にメッセージをディスパッチしたくありません。もう 1 つの方法は、Q1 の処理専用のコンシューマーを作成してから、Q2 の処理専用の別のコンシューマーを作成することです。しかし、Q1 のメッセージはめったにないので、私はそれをしたくありません。Q1 の専用のコンシューマーは、ほとんどの時間、メモリを拘束してアイドル状態になります。

0 投票する
1 に答える
633 参照

ruby-on-rails - 複数のブローカーを使用する方法? (Stomp、ActiveMQ、activemessaging)

私はストンプとアクティブメッセージングでActiveMQを使用しています。http://code.google.com/p/activemessaging/wiki/Configurationの設定手順に従おうとしました

私のbroker.ymlには、次の構成があります

私のmessaging.rbには...

しかし、これは機能していないようです。メッセージは HiWorld キューに入れられません。どんな助けでも大歓迎です。

前もって感謝します。

マテ

0 投票する
1 に答える
2769 参照

activemq - 別のマシンで実行されている ActiveMQ ブローカー (stomp プロトコル、アクティブメッセージング) に接続するには?

基本的に、異なるマシン (ubuntu) で 2 つの MQ を実行しています。お互いに通信できるようにする必要があります。

次のように、マシン A に自分の broker.yml があります。

発達:

テスト:

製造:

マシン B の broker.yml は次のようになります。

発達:

テスト:

製造:

マシン A がマシン B にメッセージを渡すように apache-activemq/conf/activemq.xml を構成するにはどうすればよいですか。

現在、私の activemq.xml は次のようになっています。

前もって感謝します!

0 投票する
1 に答える
581 参照

ruby - Rails を使用しない ActiveMessaging -- JMS プロパティ名の問題

Ruby から JMS メッセージを送信する方法を理解しようとしています。Ruby 側で Stomp を使用して、JMS と Ruby の間のインターフェイスとして StompConnect をセットアップしました。

telnet を使用して自分のキューと通信できますが、Ruby が StompConnect と適切に通信するのに問題がありました。

現在、私は ActiveMessaging を使用して通信を行うことを試みており、独自のポーラー スクリプトを作成しました。キューが作成され、メッセージが送信されると、次のエラー メッセージがスローされます。

=> /queue/HelloWorld へのサブスクライブ (ApplicationProcessor で処理) "[C4043]: プロパティ名に不正な文字が使用されています - -"}' body='javax.jms.JMSException: [C4043]: 不正な文字が使用されていますプロパティ名 - - 最上位の com.sun.messaging.jmq.jmsclient.MessageImpl.checkValidPropertyName(MessageImpl.java の 757 行目 最上位の com.sun.messaging.jmq.jmsclient.MessageImpl.checkAndSetProperty(MessageImpl)最上位の 821 行の .java com.sun.messaging.jmq.jmsclient.MessageImpl.setObjectProperty(MessageImpl.java の最上位の 2054 行 org.codehaus.stomp.jms.StompSession.copyStandardHeadersFromFrameToMessage(StompSession.java) org.codehaus.stomp.jms.StompSession.convertFrame(StompSession.java の最上位レベルの 234 行目 org.codehaus の最上位レベルの 257 行目)stomp.jms.StompSession.sendToJms(org.codehaus.stomp.jms.ProtocolConverter.onStompSend(ProtocolConverter.java org.codehaus.stomp.jms. ProtocolConverter.onStompFrame(ProtocolConverter.java at org.codehaus.stomp.tcp.TcpTransport.run(TcpTransport.java at line 131 at top level at java.lang.Thread.run(Thread.java at 680行目 ' >run(680 行目の Thread.java ' >run(680 行目の Thread.java ' >

現在、設定しているどのプロパティにも「-」はありません。これは Stomp ライブラリ自体の問題でしょうか? これは、最初に Ruby から StompConnect と通信しようとして遭遇した問題とほぼ同じです。

RubyからJMSと通信して、他の人はどのようにこれを回避していますか? 前もって感謝します!

0 投票する
2 に答える
1049 参照

ruby-on-rails - ActiveMessaging ジェネレータの問題 - Rails 3 をサポートしていません

Activemessaging プラグインと rails3 アプリに問題があります。

私のgemfileは

その後、activemessaging フォルダーがベンダーに表示されました

バンドルのインストール後、ジェネレーターでプロセッサーを作成したい

そして、次の出力が表示されます。

私は何を取りこぼしたか ?それを機能させるには、段階的に何をすべきですか。ありがとうございました

0 投票する
0 に答える
72 参照

ruby-on-rails - ソースとしてgitを使用してインストールされたgemのRails 3.1でジェネレーターを見つけるのに問題があります

まず、Rails 3.1 を使用しています。

git から activemessaging gem をインストールしました。

これは私のGemfileにあります:

gem 'activemessaging', :git => 'git://github.com/kookster/activemessaging.git'

bundle show activemessaging の出力:

/Users/ken/.rvm/gems/ruby-1.9.2-p180@cMoM/bundler/gems/activemessaging-037532e0eb69

そして .../activemessaging-037532e0eb69 ショーの ls

a13g_test_harness フィルタ プロセッサ トレーサ

しかし、ジェネレーターの 1 つを実行すると、ジェネレーターが見つからないというメッセージが表示されます。rails g を実行しても、activemessaging のジェネレーターは表示されません。

これらのジェネレーターが見つからない理由を誰か知っていますか?

0 投票する
1 に答える
125 参照

ruby-on-rails-3 - ActiveMessaging を使用した Rails 2 アプリを Rails 3 に変換する場合、いくつか質問があります

私は現在、かなり大きな Rails 2 アプリを Rails 3 に変換しています。このアプリは、プラグイン形式で activemessaging を使用しています。Amazon SQS で主にファイルのアップロードなどに使用されます。私が使用するすべてのキューは、messaging.rb で定義されており、メッセージを処理する既存のプロセッサがあります。Rails 3 バージョンでは、activemesssaging gem のバージョン 0.9.0 に切り替えています。古いプラグイン バージョンを削除する以外に、既存の messages.rb とプロセッサに対して行う必要があることは他にたくさんありますか? また、今ポーラースクリプトを手動で開始していますが、それは同じですか? Rails 3 と activemessaging に関する情報があまり見つからないようです。そのため、必要なことの基本的な手順を教えていただければ幸いです。ありがとう。

0 投票する
0 に答える
493 参照

ruby-on-rails - Ruby Stomp Gem を使用して永続メッセージと例外の再配信を処理する

Rails アプリで Stompgem ( https://github.com/stompgem/stomp ) と Activemessaging ( https://github.com/kookster/activemessaging ) を使用して、永続的/信頼性の高いメッセージを公開しようとしています (回復力を高めるため)サブスクライバーが処理の途中でクラッシュした場合でも)

トピックに永続的に公開して、再配信が失敗/時間指定/エラーのサブスクライバーに機能する方法はありますか?

公開にstompgemを使用:

参考:https ://github.com/stompgem/stomp/blob/dev/examples/publisher.rb

トピック サブスクリプションに activemessaging を使用する

:persistent => true をクライアントの公開メソッドに追加し、:ack => :client をサブスクライバーに追加するという推奨事項を試しました。

on_message の途中でサブスクライバーを終了すると (Ruby プロセスを停止するか、ランダムな例外をスローすることにより)、ブローカー (この場合は Activemq) によってメッセージが再配信されなくなります。

ゴール:

  • トピックに確実に発行する
  • サブスクライブはトピックからメッセージを受信し、メッセージが消費されたことを明示的に確認します
  • 選択した DLQ (配信不能キュー) にメッセージを入れる前に、ブローカーによる最大 X 回の再配信試行。

ありがとうございました、