問題タブ [dead-letter]
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.
websphere - WebSphere MQ での配信不能キューの構成
アプリケーションで IBM Websphere と MQ を使用していますが、MQ で作成された DEAD.QUEUE などのデッド レター キューがあることを Websphere に認識させる方法を知りたいと思いました。リクエスト/レスポンス キューからのメッセージを処理中にエラーが発生しました。
キューに何度も再発行しようとしているキューに失敗したメッセージがあるため、これを実行しようとしています。配信不能キューが構成されている場合、これは停止する可能性があると思います。私が間違っている場合は修正してください。
node.js - AMQP.Node を使用する RabbitMQ およびノードで配信不能メッセージが消費されない
ワーカーの 1 つで、一定時間後にメッセージを受信したいと考えています。いわゆるデッドレター交換を発見した後、Node と RabbitMQ を使用することにしました。
メッセージは DeadExchange のキューに送信されたように見えますが、コンシューマは WorkExchange の WorkQueue で時間が経過してもメッセージを受信していません。bindQueue がオフになっているか、デッドレターが機能していませんか?
私は今、多くの異なる値を試しました。誰かが私が欠けているものを指摘できますか?
npm の amqplib であるamqp.node ( https://github.com/squaremo/amqp.node ) を使用しています。node-amqp ( https://github.com/postwait/node-amqp ) の方がはるかに人気があるようですが、完全なプロトコルを実装しておらず、再接続に関して未解決の問題がかなりあります。
dev.rabbitmq.com は RabbitMQ 3.1.3 を実行しています。
queue - NServiceBus 4.03 では、キューが存在しない場合、メッセージがトランザクション デッド レター Q に送信されます。
私はディストリビューター/ワーカーモデルを持っています。
マシン A - ディストリビューター
マシン B - ワーカー
ワーカー B が間違った Q 名でディストリビューターにメッセージを送信しようとすると、そのメッセージは Transactional Dead Letter Q に入れられます。
メッセージがエラー q に配信されることを期待していました。
jms - CamelとActiveMQのデッドレターキュー?
デッド レター チャネルの Camel ドキュメントで説明されているとおりに、デッド レター チャネル EIP を使用しています。これが私のcamel.xmlです(ヘッダーは削除されています)
メッセージ本文に getInfo がある場合は jms:foo から jms:getInfo にルーティングし、メッセージ本文に performAction がある場合は jms.foo から jms:performAction にルーティングするというコンテンツベースのルーターを持つルートが 1 つだけあります。
jms:getInfo コンシューマーが実行されていない場合、配信は失敗し、再配信の試行は春の XML で指定されたとおりになると予想されます。しかし、何も起こらず、デッド レター キューにも何も送られません。代わりに、activemq は以下に示す例外をスローします。
なぜそれが機能しないのか説明できますか?私の理解では、コンシューマー (コンテンツベースのルーターからメッセージを受信する宛先) が実行されていない場合、acivemq はそれを配信することさえできず、すぐに例外をスローする必要があることを認識しており、その例外はキャメルのデッドレターチャネルによって処理されます。設定どおり。
私はラクダ 2.10.3 と activemq 5.8.0 を使用しています。
これらの失敗したメッセージは、activemq Web コンソールの Activemq.DLQ に表示されるため、activemq がデッド レター キューの camel xml 構成を無視して、失敗したメッセージ配信を処理していると思われます。コンシューマが実行されている場合、メッセージは camel.xml で指定されたルーティングに従って正常に配信されます。
0:58:46,317 | デバッグ | JMS メッセージの送信先: queue://getInfo とメッセージ: ActiveMQMapMessage {commandId = 0、responseRequired = false、messageId = null、originalDestination = null、originalTransactionId = null、producerId = null、destination = null、transactionId = null、expiration = 0 、タイムスタンプ = 0、到着 = 0、brokerInTime = 0、brokerOutTime = 0、correlationId = a79a0f9e-c88f-4501-a56d-2d5667aa98e0、replyTo = temp-queue://ID:myhost-57639-1382233787365-3:3:6 、persistent = false、type = null、priority = 4、groupID = null、groupSequence = 0、targetConsumerId = null、compressed = false、userID = null、content = null、marshalledProperties = null、dataStructure = null、redeliveryCounter = 0、サイズ= 0、プロパティ = {breadcrumbId=ID:myhost-57439-1382232345453-1:1:1:1:6、CamelJmsDeliveryMode=1}、readOnlyProperties = false、readOnlyBody = false、ドロップ可能 = false} ActiveMQMapMessage{ theTable = {cluster=x78} } | org.apache.camel.component.jms.JmsConfiguration | Camel (ラクダ) スレッド #2 - JmsConsumer[bar] 20:58:48,044 | デバッグ | 非アクティブなエントリ ID の削除: 8b0d77a3-afef-4612-a49f-22c1b81eb80e (20000 ミリ秒後にタイムアウト) | org.apache.camel.component.jms.reply.CorrelationTimeoutMap | Camel (キャメル) スレッド #9 - JmsReplyManagerTimeoutChecker[getInfo] 20:58:48,044 | 警告 | 相関 ID [8b0d77a3-afef-4612-a49f-22c1b81eb80e] の応答メッセージを 20000 ミリ秒待った後、タイムアウトが発生しました。ExchangeTimedOutException を (MessageId: ID: myhost-57439-1382232345453-1:1:1:1:5 on ExchangeId: ID-myhost-57640-1382233788284-0-2) に設定し、ルーティングを続行します。| | org.apache.camel.component.jms.reply.TemporaryQueueReplyManager | Camel (ラクダ) スレッド #9 - JmsReplyManagerTimeoutChecker[getInfo] 20: 58:48,045 | 警告 | JMS メッセージ リスナーの実行に失敗しました。原因: [org.apache.camel.RuntimeCamelException - org.apache.camel.ExchangeTimedOutException: OUT メッセージが受信されませんでした: 20000 ミリ秒以内に、correlationID の応答メッセージ: 8b0d77a3-afef-4612-a49f-22c1b81eb80e が受信されませんでした。Exchange[JmsMessage[JmsMessageID: ID:myhost-57439-1382232345453-1:1:1:1:5]]] | org.apache.camel.component.jms.EndpointMessageListener | Camel (camel) スレッド #4 - JmsConsumer[bar] org.apache.camel.RuntimeCamelException: org.apache.camel.ExchangeTimedOutException: OUT メッセージは受信されませんでした: 20000 ミリ秒以内に応答メッセージが返されます。 a49f-22c1b81eb80e 受信していません。Exchange[JmsMessage[JmsMessageID: ID:myhost-57439-1382232345453-1:1:1:1:5]] org.apache.camel.util.ObjectHelper. java.lang.Thread.run(Thread.java:662) の ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 原因: org.apache.camel.ExchangeTimedOutException: OUT メッセージが受信されませんでした: 20000 ミリ秒期限の返信相関 ID: 8b0d77a3-afef-4612-a49f-22c1b81eb80e のメッセージが受信されませんでした。Exchange[JmsMessage[JmsMessageID: ID:myhost-57439-1382232345453-1:1:1:1:5]] org.apache.camel.component.jms.reply.ReplyManagerSupport.processReply(ReplyManagerSupport.java:133) at org .apache.camel.component.jms.reply.TemporaryQueueReplyHandler.onTimeout(TemporaryQueueReplyHandler.java:61) org.apache.camel.component.jms.reply.CorrelationTimeoutMap.onEviction(CorrelationTimeoutMap.java:53) org.apache.camel .component.jms.reply.CorrelationTimeoutMap.onEviction(CorrelationTimeoutMap.java:
scala - akka 2.2.0 Scala 2.11 "メッセージが配信されませんでした" - Thread.sleep(50) を使用しない場合
私は Scala と Akka を初めて使用しますが、単純なシナリオがあります... URL のリストを取得して、各 URL をメッセージとして新しいアクターに送信し、http GET 要求を作成しようとしています。16 個の URL のリストだけで、約 40 ~ 65% の成功率が得られ、他の URL では「メッセージが配信されませんでした」というデッドレターが返されます。ただし、アクターを作成する前に Thread.sleep(50) を配置すると、デッドレター ミスは発生しません。注: HTTP Get は、要因である場合とそうでない場合がある scala クラスではなく、java クラスを使用しています。以下のコード例を参照してください... Akka がメッセージを保証しないことは知っていますが、この成功率は正しくないように見えます。間違っているに違いありません。ご指摘ありがとうございます。