すべてのプロダクト
Search
ドキュメントセンター

:長いメッセージの送信

最終更新日:Mar 22, 2020

状況

Alibaba Cloud Message Service (MNS) キューの最大メッセージサイズは、64 KB です。これは、通常の状況で制御フロー情報交換チャネルとして使用されるメッセージのニーズを十分に満たしています。ただし、これよりもメッセージサイズが大きい特別なシナリオでは、メッセージスライスを使用します。

メッセージスライスを使用せずに MNS で 64 KB を超えるメッセージを送信することができます。以下に解決策を示します。

解決策

  1. プロデューサーが 64 KB より大きいメッセージだと判断した場合、OSS にアップロードしてから MNS に送信します。

  2. 次に、プロデューサーはメッセージデータの適切なオブジェクト情報を MNS に送信します。

  3. MNS キューからメッセージを読み取るとき、コンシューマーはメッセージが OSS オブジェクト情報かどうかを判断します。

  4. メッセージが OSS オブジェクト情報の場合、コンシューマーは適切なオブジェクト情報を OSS からダウンロードし、メッセージとして上位層のプログラムに返します。

  5. 64 KB より短いメッセージは、通常どおり MNS を使用して直接送信されます。

各プロセスを以下に示します。

Large Message

プログラムの実装

長いメッセージの場合のサンプルコードは、上記の解決策の Java 実装例です。主な機能は BigMessageSizeQueue クラスにカプセル化されます。

BigMessageSizeQueue は、次のパブリックメソッドを提供します。

  1. public BigMessageSizeQueue(CloudQueue cq, OSSClient ossClient, String ossBucketName)
  2. //Constructor, cq is a common mnsqueue object; ossClient and ossBucketName include OSS region and bucket information needed for relaying large messages
  3. public Message putMessage(Message message) // Send a message
  4. public Message popMessage(int waitSeconds) // Receive a message
  5. public void deleteMessage(String receiptHandle) // Delete a message
  6. public void setBigMessageSize(long bigMessageSize) // Set a large message threshold (a message larger than this threshold will be transmitted through OSS), which by default is 64 KB;
  7. public void setNeedDeleteMessageObjectOnOSSFlag(boolean flag) // Choose whether to delete messages in OSS, which is set to Yes by default;

サンプルコードの詳細は、添付の Demo.java のコードをご参照ください。

注意

  1. 長いメッセージは、大量のネットワーク帯域幅を消費します。したがって、この解決策で長いメッセージを送信する場合、プロデューサーとコンシューマーのネットワーク帯域幅がボトルネックになる可能性があります。

  2. 長いメッセージの送信には時間がかかり、ネットワーク変動の影響を受けやすくなります。したがって、必要に応じて上位層で再試行を実装することを推奨します。