問題タブ [rebus]
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.
rebus - Rebus を 0.71.4 から 0.75.2 にアップグレードした後の RabbitMq 接続の問題を解決するにはどうすればよいですか?
Rebus を 0.71.4 から 0.75.2 にアップグレードした後の RabbitMq 接続の問題を解決するにはどうすればよいですか?
アクティビティを監視するための N 個のダッシュボード、ワークフローを制御するための 1 つのマネージャー、および作業を実行するための N 個のワーカーを備えた分散プロセッサのセットアップがあります。各コンポーネント間の通信は、RabbitMq を使用して管理されます。Rebus 0.75.2 にアップグレードするまで (RabbitMq.Client の 3.4.0.0 へのアップグレードを含む)、[Rebus 0.71.4 で] すべてがうまく機能しています。
マネージャーは、ワーカーに発行されるハートビート、ダッシュボードに発行される要求/応答監査メッセージ、ワーカーによって実行される作業を含むメッセージなど、複数の形式の通信を送信するため、最も複雑なコンポーネントです。このメッセージングはすべて同時に行われています。
ワーカーで長時間実行されているタスクによって作業が停滞するのを防ぐために、1 のプリフェッチを使用しています (ジョブの範囲は 1 秒から 5 分です)。
現在、マネージャー内での公開中に不規則な例外が発生しています。
2015-01-07 14:59:58.6205 | Error | An error occurred while rolling back the transaction! RabbitMQ.Client.Exceptions.AlreadyClosedException Already closed: The AMQP operation was interrupted: AMQP close-reason, initiated by Peer, code=504, text="CHANNEL_ERROR - unexpected command while processing 'tx.commit'", classId=60, methodId=40, cause= at RabbitMQ.Client.Impl.SessionBase.Transmit(Command cmd)
at RabbitMQ.Client.Impl.ModelBase.TransmitAndEnqueue(Command cmd, IRpcContinuation k)
at RabbitMQ.Client.Impl.ModelBase.ModelRpc(MethodBase method, ContentHeaderBase header, Byte[] body)
at RabbitMQ.Client.Framing.Impl.Model.TxRollback()
at System.Action.Invoke()
at Rebus.Bus.TxBomkarl.RaiseDoRollback()
at Rebus.Bus.Worker.<TryProcessIncomingMessage>d__1d.MoveNext()
2015-01-07 14:59:58.6275 | Warn | User exception in Rebus 1 worker 1: Rebus.Bus.QueueCommitException: An exception occurred while attempting to commit the queue transaction ---> RabbitMQ.Client.Exceptions.OperationInterruptedException: The AMQP operation was interrupted: AMQP close-reason, initiated by Peer, code=504, text="CHANNEL_ERROR - unexpected command while processing 'tx.commit'", classId=60, methodId=40, cause=
at RabbitMQ.Client.Impl.SimpleBlockingRpcContinuation.GetReply()
at RabbitMQ.Client.Impl.ModelBase.ModelRpc(MethodBase method, ContentHeaderBase header, Byte[] body)
at RabbitMQ.Client.Framing.Impl.Model.TxCommit()
at System.Action.Invoke()
at Rebus.Bus.TxBomkarl.RaiseDoCommit()
at Rebus.Bus.Worker.<TryProcessIncomingMessage>d__1d.MoveNext()
--- End of inner exception stack trace ---
at Rebus.Bus.Worker.<TryProcessIncomingMessage>d__1d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>b__0(Object state)
at Rebus.Bus.RebusSynchronizationContext.Run()
at Rebus.Bus.Worker.MainLoop()
これらは、RabbitMq ログからのいくつかの関連エントリです。
=ERROR REPORT==== 7-Jan-2015::15:41:54 ===
Error on AMQP connection <0.680.0> ([::1]:59429 -> [::1]:5672, vhost: 'efs', user: 'efs.eod', state: running), channel 1:
{amqp_error,channel_error,"unexpected command while processing 'tx.commit'",
'basic.publish'}
=WARNING REPORT==== 7-Jan-2015::15:42:55 ===
closing AMQP connection <0.553.0> ([::1]:59421 -> [::1]:5672):
connection_closed_abruptly
RabitMq サーバー 3.3.5 および 3.4.3 に対してテストを行いました。
この動作は再現可能ですが、散発的です。そして、正しく機能する場合、通信は 0.71.4 のときよりもはるかに遅くなります。
これまでのところ、問題を単独で再現することはできませんでした。問題を診断するためのアドバイスをいただければ幸いです。
.net - Rebus の SendAsync
Azure Service Bus 経由で Rebus を使用しています。非同期でメッセージを送信する方法はありますか? Rebus で SendAsync のようなものを見つけることができませんでした。
rebus - Rebus は自動的に退会しますか?
rebus はいつ退会しますか? サブスクライバーが実行されていない場合、一定期間後に自動的にサブスクライブを解除するものはありますか?
サブスクライバー サービスが一定期間停止されていると、パブリッシャーがメッセージを送信し続けていないように見える状況がいくつかありました。私は何を間違っているのでしょうか?
rebus - メッセージ本文のタイプを byte[] から string に変更する方法はありますか
トランスポートメッセージの本文タイプをバイト[]から文字列に変更する方法はありますか? これにより、ユーザーはキュー メッセージの内容を確認しやすくなり、メッセージをキューに書き込むのにも役立ちます (特定のサポート シナリオの場合のみ)。ソリューションに TIBCO EMS キューを使用するようにトランスポートを拡張しようとしているため、これらすべてが必要です。お知らせ下さい。前もって感謝します。
rebus - Rebus にパススルー Publisher を実装する方法はありますか?
Web アプリケーションのいずれかがサブスクライバーにイベント メッセージをプッシュできるようにする汎用 rebus パブリッシング サービスをセットアップしようとしています。サービスの唯一の仕事は、サブスクリプションを維持し、受信したメッセージを再発行することです。サービスで特定の IHandleMessage 実装を作成する必要がないようにしたいと考えています。これは、着信メッセージについて、その種類以外は何も知る必要がないためです。
私はいくつかのアプローチ (IHandleMessages など) を試しましたが、アセンブリを持たないメッセージを逆シリアル化しようとすると rebus がクラッシュします。
rabbitmq - Rebus と RabbitMQ、非永続メッセージ、およびリクエスト/リプライ ピアの理想的なセットアップ
Rebus と RabbitMQ を一緒に使用して、いくつかの異なるシナリオをカバーすることを検討しています。
シナリオ A 中央サーバーが任意のサブスクライバーのリストにプッシュ通知を送信できるようにしたいのですが、メッセージは永続的または永続的である必要はありません。サブスクライバーが接続されている場合は通知を受け取る必要がありますが、切断されている場合は、クライアントのメッセージをキューに入れる必要はありません。
これまでのテストでは、プロデューサーとコンシューマーがUseRabbitMqInOneWayMode()
and と通信することができましManageSubscriptions()
たが、サブスクライバーがいない場合、またはサブスクライバーが切断された場合、RabbitMQ でメッセージが蓄積されます。のヘッダーを false に設定しようとしましたRabbitMqMessageQueue.InternalHeaders.MessageDurability
が、効果がありません。Rebus が設定するデフォルトのキューが耐久性があるためだと思います。Rebus 内でこの動作を制御する方法はありますか?
シナリオ B クライアントがオンラインになるか切断されたときに、クライアント間に要求/応答チャネルをセットアップしたいと考えています。例えば:
- クライアント A とクライアント B が接続する
- クライアント A は、クライアント B だけが持っているデータを要求するメッセージを送信します。クライアント B は情報を収集し、A に返信します。
- クライアント B が切断される
- クライアント A はクライアント B にデータを要求しますが、B が使用できなくなったため、エラーを受け取るはずです。
この場合の推奨構成は何ですか?
ありがとう。