Java分散インタビュー質問のメッセージキューActiveMQ部分



Message Queue Activemq Part Java Distributed Interview Questions



Java分散インタビュー質問のメッセージキューActiveMQ部分

1. ActiveMQを使用して分散トランザクションを解決するにはどうすればよいですか?



インターネットアプリケーションには、基本的にユーザー登録機能があります。登録時に、次のことを行います。

  • ユーザー入力情報を収集し、データベースに保存します
  • 確認コードをユーザーの携帯電話または電子メールに送信する

従来の集中型アーキテクチャの場合、この機能の実装は非常に簡単です。ローカルトランザクションを開始し、ユーザーデータをローカルデータベースに挿入し、確認コードを送信して、送信します。ただし、分散アーキテクチャでは、ユーザーと送信検証コードは2つの独立したサービスであり、それぞれに独自のデータベースがあるため、ローカルトランザクションを通じて操作のアトミック性を保証することはできません。現時点では、この需要を実現するためにActiveMQ(メッセージキュー)を使用する必要があります。ユーザーが登録操作を実行すると、操作のメッセージが作成され、ユーザー情報が正常に保存されたら、このメッセージをメッセージキューに送信します。確認コードシステムがメッセージを監視し、メッセージが受信されると、確認コードがユーザーに送信されます。



2.メッセージの繰り返し送信を防ぐ方法は?

解決策は簡単です。メッセージステータステーブルを追加します。一般的には、メッセージの処理ステータスを記録するために使用される元帳です。各メッセージが処理される前に、ステータステーブルでクエリが実行されます。同じメッセージがすでに存在する場合、繰り返し送信されるのを防ぐために処理されません。

3.どのメッセージキューを理解しますか?



ActiveMQ、RabbitMQ、kafka。

RabbitMQは、Erlangで記述されたオープンソースのメッセージキューです。 AMQP、XMPP、SMTP、STOMPなどの多くのプロトコルをサポートしています。このため、非常に重量があり、エンタープライズレベルの開発に適しています。同時に、ブローカーアーキテクチャが実装されます。つまり、メッセージはクライアントに送信される前に中央キューに入れられます。ルーティング、負荷分散、またはデータの永続性を適切にサポートします。

ActiveMQは、Apacheのサブプロジェクトです。 ZeroMQと同様に、エージェントとピアツーピアテクノロジーを使用してキューを実装できます。同時に、RabbitMQと同様に、少量のコードで高度なアプリケーションシナリオを効率的に実装できます。

KafkaはApacheのサブプロジェクトです。これは、高性能のクロスランゲージ分散パブリッシュ/サブスクライブメッセージキューイングシステムです。 Jafkaは、KafkaのアップグレードバージョンであるKafkaで培養されます。これには次の特徴があります。高速永続性、O(1)オーバーヘッド高スループットでのメッセージ永続性。共通サーバーの完全分散システムで10W / sのスループットレートに達する可能性があり、ブローカー、プロデューサー、コンシューマーはすべて自動的に分散および自動をサポートします負荷分散は、Hadoopデータの並列ロードをサポートします。ログデータやHadoopのようなオフライン分析システムの場合、リアルタイム処理の制限が必要ですが、これは実行可能なソリューションです。 。 Kafkaは、Hadoopの並列ロードメカニズムを通じてオンラインとオフラインのメッセージ処理を統合します。 ActiveMQと比較すると、ApacheKafkaは非常に軽量なメッセージングシステムです。非常に優れたパフォーマンスに加えて、それはうまく機能する分散システムでもあります。

MQ選択比較チャート

java ActiveMQ

4. ActiveMQがメッセージの送信に失敗した場合はどうなりますか?

Activemqには、ポイントツーポイント形式とパブリッシュ/サブスクライブモデルの2つの通信方法があります。

ポイントツーポイントモードの場合、メッセージが正常に送信されない場合、メッセージはコンシューマーが消費するまでデフォルトでactivemqサーバーに保存されるため、この時点でメッセージが失われることはありません。

パブリッシュ/サブスクライブモードの通信の場合、デフォルトで通知されるのは1回だけであり、このメッセージが受信されない場合は通知されなくなります。このシナリオは、メッセージ配信率が高くない場合にのみ適用できます。メッセージを配信する必要があり、失われない場合は、永続サブスクリプションを構成する必要があります。各サブスクライバーはIDを定義し、サブスクライブ時にactivemqに登録します。メッセージを送受信するときは、送信モードを永続的に設定する必要があります。このとき、クライアントがメッセージを受信できない場合、クライアントが正常にメッセージを受信するまで、メッセージはサーバーに保持されます。