amqpが確認した後、アグリゲーターが分割されたメッセージを集約しない

サリム
  1. IDのリストを取得するdbクエリがあります
  2. スプリッターを使用して、タスクエグゼキューターを使用してチャネルに分割しました
  3. 次に、すべてのIDに対してamqpメッセージを公開します

要件:次の手順に進む前に、すべてのメッセージが公開されていることを確認する必要があります。

そのため、メッセージackチャネルの後にアグリゲーターを追加しました

問題:IDの数が少ない場合(おそらく3000レコード未満)、ソリューションは期待どおりに機能しています。ただし、IDの数が多い場合、アグリゲーターは待機状態になります

公開されたメッセージの数は常に正しいです。そのため、データベースの更新の下のコードに、確認チャネルの後にカウンターを追加しました。カウントは、IDのリストが大きい場合はIDの数よりも少なくなります。

<!-- service activator query database table and return list of IDs of type: Message<List<Map<String, Object>>> -->

<int:splitter id= "accountsSplitter" input-channel="listOfAccountsChannel" output-channel="accountChannel" />   
<int:channel id="accountChannel">
    <int:dispatcher task-executor="splitterTaskExecutor"/>
</int:channel>

<int:chain id="publishMessageChain" input-channel="accountChannel">
    <int:transformer ref="accountIdTransformer"/>

    <int-amqp:outbound-channel-adapter 
        amqp-template="amqpTemplateCore" 
        confirm-ack-channel="messageAckChannel"
        confirm-nack-channel="messageAckChannel"
        return-channel="messageAckChannel"
        confirm-correlation-expression="#root"
        exchange-name="ABC"
        routing-key="#{abcRoutingKey}">
    </int-amqp:outbound-channel-adapter>
</int:chain>

<int:chain id="confirmMessageChain" input-channel="messageAckChannel" output-channel="successMessageChannel">
    <int:header-enricher id="replyChannelHeaderEnricher">
        <int:reply-channel expression="payload.headers['replyChannel']" />
    </int:header-enricher>

    <int:transformer id="payloadTransformer" expression="payload" />
</int:chain>

<int:aggregator id="messagesConfirmedAggregator" input-channel="successMessageChannel" output-channel="aggregateChannel"/>

  <task:executor id="splitterTaskExecutor" pool-size="10-40" queue-capacity="1000" rejection-policy="CALLER_RUNS" />
アルテムビラン

公開されたメッセージの数は常に正しいです。

どうしてそう思うのですか?

confirm-nack-channel「ネガティブパブリッシャーの確認」を見るために追加ましょう

そしておそらくreturn-channel、同様にその場合は、「送信されます返すメッセージ」方法を確認します。

更新

いくつかのローカルテストの後、私は原因の根本を見つけました。

40(最大)として送信するために並行スレッドプールを使用しますデフォルトでCachingConnectionFactory25。を使用します。キャッシュサイズを超えると、新しい揮発性物質Channelが作成され、確認を5秒だけ待つ場合があります。

CachingConnectionFactory.setChannelCacheSize()同時および確認の要件を満たすには、かなり大きな値に増やす必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

アプリを実行した後、「残念ながら「マイアプリ」が停止しました」というメッセージが表示され続ける

分類Dev

フォームをリセットした後、検証メッセージが削除されない

分類Dev

jshint gruntターゲットはメッセージを生成します:0ファイルがリントされました。無視したファイルを確認してください

分類Dev

アプリを再インストールした後、Firebaseメッセージングが機能しない

分類Dev

saxonを9.5.1.8にアップグレードした後に警告メッセージが表示されました

分類Dev

ナビゲート時にReduxストアがリセットされました(レデューサーをリファクタリングした後)

分類Dev

[検索]ボタンをクリックした後、クライアント側のメッセージが表示されない

分類Dev

Camelでループした後に集約されたメッセージにアクセスする方法

分類Dev

PHPスクリプトを正常に実行した後も成功メッセージが表示されない

分類Dev

Rabbitmqでメッセージを受信した後にエラーが発生した場合、メッセージがキューで削除されない理由

分類Dev

Apache Camel SQSコンポーネントがSEDAキューを非同期にし、SQSメッセージが確認または削除されない

分類Dev

AWS SES SMTPの使用-エラー554メッセージが拒否されました:メールアドレスが確認されていません。次のIDがリージョンのチェックインに失敗しました

分類Dev

AngularJSでボタンをクリックした後に値が選択されていない場合にエラーメッセージを表示する方法

分類Dev

戻るボタンが2回クリックされたときにXamarin.Androidアプリを終了させるにはどうすればよいですか(クリック間のメッセージを確認してください)?

分類Dev

Spring AMQPが未確認のメッセージをブロックしないようにする方法は?

分類Dev

Spring AMQPが未確認のメッセージをブロックしないようにする方法は?

分類Dev

sendToDeviceが正常に実行された後、Firebaseクラウドメッセージングが機能しない

分類Dev

確認メールと登録後のメールが確認されていないメッセージ

分類Dev

データベース実行からのエラー メッセージ: ログイン マッピングが存在しないため、リモート サーバーへのアクセスが拒否されました

分類Dev

アセットカタログに移行した後、ストーリーボードにアセットが表示されない

分類Dev

MantisBT:確認メッセージがGmailで送信されませんでした

分類Dev

メディアプレーヤーをリセットした後、再生ボタンが機能しない

分類Dev

列のすべてのデータが記録された後にポップアップ確認メッセージを追加する

分類Dev

「ページが生成されています。」ページキャッシュをクリアした後のメッセージTYPO37.6

分類Dev

onTapGestureを使用したセグメント化されたピッカーがタップに応答しない

分類Dev

Ubuntuを20.04にアップグレードした後、QtCreatorがリンクされたライブラリを認識しない

分類Dev

提供された要素がクリックされたターゲット内にあることを確認してください

分類Dev

メッセージios9を送信した後、MFMessageComposeViewControllerがアプリケーションに戻らない

分類Dev

約2000個のURLを確認した後、ウェブクローラーがハングアップする

Related 関連記事

  1. 1

    アプリを実行した後、「残念ながら「マイアプリ」が停止しました」というメッセージが表示され続ける

  2. 2

    フォームをリセットした後、検証メッセージが削除されない

  3. 3

    jshint gruntターゲットはメッセージを生成します:0ファイルがリントされました。無視したファイルを確認してください

  4. 4

    アプリを再インストールした後、Firebaseメッセージングが機能しない

  5. 5

    saxonを9.5.1.8にアップグレードした後に警告メッセージが表示されました

  6. 6

    ナビゲート時にReduxストアがリセットされました(レデューサーをリファクタリングした後)

  7. 7

    [検索]ボタンをクリックした後、クライアント側のメッセージが表示されない

  8. 8

    Camelでループした後に集約されたメッセージにアクセスする方法

  9. 9

    PHPスクリプトを正常に実行した後も成功メッセージが表示されない

  10. 10

    Rabbitmqでメッセージを受信した後にエラーが発生した場合、メッセージがキューで削除されない理由

  11. 11

    Apache Camel SQSコンポーネントがSEDAキューを非同期にし、SQSメッセージが確認または削除されない

  12. 12

    AWS SES SMTPの使用-エラー554メッセージが拒否されました:メールアドレスが確認されていません。次のIDがリージョンのチェックインに失敗しました

  13. 13

    AngularJSでボタンをクリックした後に値が選択されていない場合にエラーメッセージを表示する方法

  14. 14

    戻るボタンが2回クリックされたときにXamarin.Androidアプリを終了させるにはどうすればよいですか(クリック間のメッセージを確認してください)?

  15. 15

    Spring AMQPが未確認のメッセージをブロックしないようにする方法は?

  16. 16

    Spring AMQPが未確認のメッセージをブロックしないようにする方法は?

  17. 17

    sendToDeviceが正常に実行された後、Firebaseクラウドメッセージングが機能しない

  18. 18

    確認メールと登録後のメールが確認されていないメッセージ

  19. 19

    データベース実行からのエラー メッセージ: ログイン マッピングが存在しないため、リモート サーバーへのアクセスが拒否されました

  20. 20

    アセットカタログに移行した後、ストーリーボードにアセットが表示されない

  21. 21

    MantisBT:確認メッセージがGmailで送信されませんでした

  22. 22

    メディアプレーヤーをリセットした後、再生ボタンが機能しない

  23. 23

    列のすべてのデータが記録された後にポップアップ確認メッセージを追加する

  24. 24

    「ページが生成されています。」ページキャッシュをクリアした後のメッセージTYPO37.6

  25. 25

    onTapGestureを使用したセグメント化されたピッカーがタップに応答しない

  26. 26

    Ubuntuを20.04にアップグレードした後、QtCreatorがリンクされたライブラリを認識しない

  27. 27

    提供された要素がクリックされたターゲット内にあることを確認してください

  28. 28

    メッセージios9を送信した後、MFMessageComposeViewControllerがアプリケーションに戻らない

  29. 29

    約2000個のURLを確認した後、ウェブクローラーがハングアップする

ホットタグ

アーカイブ