概要メッセージキューの顔の質問
1.メッセージキューアプリケーションのシナリオは何?
A:メッセージキューアプリケーションのシナリオは次のよう。
- デカップリングの適用は、例えば、ユーザーの注文の後、オーダーは、在庫システムにアクセスできない場合、受注マイナス在庫は注文が失敗し、失敗し、通知システムの在庫管理システムが必要です。システムインベントリに結合された注文システムは、あなたがメッセージキューを使用する場合は、この時点では、ユーザーが最初のメッセージの永続化の成功に戻ることができ、そのため在庫システムの復旧後、あなたは、通常の消費量の在庫を差し引くことができます。
- メッセージ場合、アプリケーションがハング、トラフィックの急増を引き起こし、通常のトラフィック量から、例えば、スパイク活動をシフトピーク負荷は、メッセージキューを追加今回は、サーバは、ユーザ要求、最初の書かれたメッセージ・キューを受信しますキュー長が最大数、ユーザ要求またはエラーページにジャンプ直接廃棄を超えます。
- ログシステムは、例えば、クライアントがログを収集する責任、およびメッセージ・キューを書くのタイミング、メッセージキュー、その後、統一されたログデータの保存と転送されます。
利点2.RabbitMQは何がありますか?
A:利点のRabbitMQ次のように:
- 信頼性、RabbitMQのメッセージの安定性を確保するための永続的なサポート。
- Erlangの開発言語を用いた高同時実行、RabbitMQのは、Erlangのは、高並行性と高可用性機能が付属して電話交換機用に開発された言語、自然のオーラです。
- クラスタ展開はアーランのRabbitMQのクラスタの展開が非常に簡単になるなるからそれは、簡単です。
- コミュニティアクティブ・ハイ、RabbitMQのは広く使われているので、コミュニティの活動も非常に高いので、
- より多くのデータが、その問題を解決するためのコストが非常に低いため、低コストの問題を解決します。
- こうしたJavaや.NET、PHP、Pythonのは、JavaScript、Rubyの、行くようにというようにサポートし、複数の言語、主流のプログラミング言語のサポート、。
- プラグと、ウェブコンソールメッセージ管理プラグイン、メッセージ遅延のプラグインとして、使用することがより便利。
そこに重要な役割を3.RabbitMQは何ですか?
A:RabbitMQのは、次の3つの重要な役割が含まれています。
- メーカー:メッセージの作成者は、メッセージサーバにデータを作成し、プッシュする責任があります。
- 消費者:データ及び応答メッセージを処理するメッセージ受信部と、
- エージェント:RabbitMQのは、単に「エクスプレス」の役割を果たし、自身がメッセージを生成しません「表現」の役割を再生するために、自分自身です。
重要なコンポーネント4.RabbitMQは何がありますか?彼らはそうなんですか?
:RabbitMQのが含まれている重要なコンポーネントは次のとおりのConnectionFactory(接続マネージャ)、チャンネル(チャンネル)、交換(スイッチ)、キュー(待ち行列)、RoutingKey(キーをルーティング)、bindingKey重要なコンポーネント(バインドキー)など、どの次のような役割は次のとおりです。
- ConnectionFactory(接続管理)アプリケーションは、プログラムコードを使用して、マネージャとRabbitMQの間の接続を確立します。
- チャンネル(チャンネル):フィードチャネルメッセージで使用されます。
- 交換(スイッチ)、割当てメッセージを受信します。
- 待ち行列(キュー):メッセージプロデューサを記憶します。
- RoutingKey(キールーティング):スイッチに割り当てるためのデータ生成手段と
- BindingKey(バインドキー):キューにバインドされた交換用のメッセージ。
5.メッセージの永続性とは何ですか?
A:メッセージの永続性は、メッセージの損失を防ぐために、物理メディアにメッセージを保存することです。
6.RabbitMQは、メッセージの永続性を実装するために、どのような条件を満たすことが必要ですか?
A:RabbitMQの達成するために、メッセージの永続性は、以下の4つの条件を満たしている必要があります。
- 真の耐久時間の配信メッセージ・セット、メッセージの永続性、コード:channel.queueDeclare(X、真、偽、偽、NULL)は、パラメータ2がtrue持続に設定されています。
- 配信モード配信モード設定が2(永続的)、コードに設定されている:channel.basicPublish(X、X、MessageProperties.PERSISTENT TEXT PLAIN、X)、パラメータは、ディスクに格納された3プレーンテキストに設定されています。
- 永続的なメッセージは、スイッチに到着しました。
- メッセージは永続キューを到着しました。
7.欠点の持続性は何のメッセージ?どのように緩和するには?
A:あなたは、これにより、サーバーのスループットが低下、書き込みメモリ性能よりも少ないハード多くのことを書きたいので、メッセージは、非常に永続的な欠点消費性能です。SSDは寛解メッセージの永続性の欠点を達成するために、アクセス速度を向上させるために使用することができます。
8.どのようにRabbitMQのに接続するためのJavaコードを使用するには?
A:二つの方法以下のRabbitMQに接続するためのJavaコードを使用します:
一つの方法:
public static Connection GetRabbitConnection() {
ConnectionFactory factory = new ConnectionFactory();
factory.setUsername(Config.UserName);
factory.setPassword(Config.Password);
factory.setVirtualHost(Config.VHost);
factory.setHost(Config.Host);
factory.setPort(Config.Port);
Connection conn = null;
try {
conn = factory.newConnection();
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
第二の方法:
public static Connection GetRabbitConnection2() {
ConnectionFactory factory = new ConnectionFactory();
// 连接格式:amqp://userName:password@hostName:portNumber/virtualHost
String uri = String.format("amqp://%s:%s@%s:%d%s", Config.UserName, Config.Password, Config.Host, Config.Port,
Config.VHost);
Connection conn = null;
try {
factory.setUri(uri);
factory.setVirtualHost(Config.VHost);
conn = factory.newConnection();
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
9. Javaコード例のRabbitMQの消費と生産を使用していますか?
A:次のようにコードです。
public static void main(String[] args) {
publisher(); // 生产消息
consumer(); // 消费消息
}
/\*\* \* 推送消息 \*/
public static void publisher() {
// 创建一个连接
Connection conn = ConnectionFactoryUtil.GetRabbitConnection();
if (conn != null) {
try {
// 创建通道
Channel channel = conn.createChannel();
// 声明队列【参数说明:参数一:队列名称,参数二:是否持久化;参数三:是否独占模式;参数四:消费者断开连接时是否删除队列;参数五:消息其他参数】
channel.queueDeclare(Config.QueueName, false, false, false, null);
String content = String.format("当前时间:%s", new Date().getTime());
// 发送内容【参数说明:参数一:交换机名称;参数二:队列名称,参数三:消息的其他属性-routing headers,此属性为MessageProperties.PERSISTENT\_TEXT\_PLAIN用于设置纯文本消息存储到硬盘;参数四:消息主体】
channel.basicPublish("", Config.QueueName, null, content.getBytes("UTF-8"));
System.out.println("已发送消息:" + content);
// 关闭连接
channel.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/\*\* \* 消费消息 \*/
public static void consumer() {
// 创建一个连接
Connection conn = ConnectionFactoryUtil.GetRabbitConnection();
if (conn != null) {
try {
// 创建通道
Channel channel = conn.createChannel();
// 声明队列【参数说明:参数一:队列名称,参数二:是否持久化;参数三:是否独占模式;参数四:消费者断开连接时是否删除队列;参数五:消息其他参数】
channel.queueDeclare(Config.QueueName, false, false, false, null);
// 创建订阅器,并接受消息
channel.basicConsume(Config.QueueName, false, "", new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
String routingKey = envelope.getRoutingKey(); // 队列名称
String contentType = properties.getContentType(); // 内容类型
String content = new String(body, "utf-8"); // 消息正文
System.out.println("消息正文:" + content);
channel.basicAck(envelope.getDeliveryTag(), false); // 手动确认消息【参数说明:参数一:该消息的index;参数二:是否批量应答,true批量确认小于index的消息】
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}
10.RabbitMQ交換タイプがありますか?
A:RabbitMQの消費パターンは4種類がありますスイッチ(取引所)です。
- ダイレクト:ポーリング
- ヘッダー:ポーリングではなく、ヘッダルーティングは、メッセージキーの使用はほとんど、パフォーマンスの低下と一致することができません
- ファンアウト:放送、すべての加入者に送られます
- トピック:マッチングモード、正規表現のマッチングメッセージの使用を可能にします
RabbitMQのデフォルトは、直接的な方法です。
各メッセージが11.RabbitMQ消費できることを保証するために、どのように?
A:RabbitMQの使用ACKメッセージは、手動確認メッセージが消費されるchannel.basicAck()メソッドを選択するために、実際のビジネスに応じて、各メッセージを消費することができることを確実にする方法を開発謝辞。
メッセージを受信した後12.RabbitMQそれを消費しなければなりませんか?
A:あなたは、次の2つのことを行うことができ、メッセージのRabbitMQを受け取った後、消費することはできませんメッセージ確認前に消費:
- 消費者の拒否メッセージ、使用channel.basicReject(メッセージ番号、真の)方法、メッセージは他の加入者に割り当てられます。
- デッドレターキューに設定され、専門的なストレージのデッドレターキューは、メッセージキューを拒否しました。
13.topicモードで「com.mq.rabbit.error」のメッセージのためのキーのルートをリリース、次のメッセージが届きませんか?
cn.mq.rabbit *。
B:#間違い
100:cn.mq. *
500:#cn.mq.
回答:C
分析タイトル:「*」文字の複数のマッチングのために、「#」と0をコンテンツのセグメントと一致する(分割と「」)。
14.以下は、過去のメッセージをされ得ることができますか?
A:トピックスイッチ
B:ファンアウトスイッチ
C:直接交換
D:上記のなし
回答:C
トピックの解析:ファンアウトと話題の形で放送されている、歴史がメッセージを得ることができない、と指示することができます。
15.RabbitMQは、トランザクション機能が含まれていますか?どのように使用するには?
A:RabbitMQのは、主にチャンネル(チャンネル)、次の三つの主な方法を設定するには、トランザクション機能が含まれています。
- channel.txSelect()ステートメントは、トランザクション・モードを開始します。
- channel.txCommentは()トランザクションをコミットします。
- channel.txRollback()トランザクションをロールバックします。
どのような状況下で16.RabbitMQ取引は無効ですか?
:トランザクションが無効であるときAUTOACKでのRabbitMQトランザクションは=真の消費量が自動的に認識されています。消費が自動的に確認された場合ので、RabbitMQのトランザクションが後ろどんな役割を果たしていないロールされた場合でも、キューから取り出したメッセージを指示します。
ZooKeeperのから17.Kafkaは一人でそれを使用することができますか?
A:カフカカフカの管理と利用のZooKeeperノードサーバの連携のでカフカは、一人でのZooKeeper離婚することはできません。
いくつかの戦略18.Kafkaデータ保持がありますか?
A:有効期限の時間に応じて保存されているメッセージの大きさに応じて保持し、保持:カフカは、2つのデータ保持ポリシーがあります。
19.Kafkaも7に設定し、10Gのデータをクリアニュースが10Gに達したとき、五日目には、この時間はカフカに対処する方法でしょうか?
A:今回カフカは、データが消去されます条件を満たすようにサイズにかかわらず、時間の、データのクリーンアップを実行します。
20.どのように遅いカフカの実行を引き起こすのでしょうか?
A:以下の例は、遅くカフカの実行につながることができます:
- CPUのパフォーマンスのボトルネック
- ディスクの読み取りと書き込みのボトルネック
- ネットワークのボトルネック
21.注意を払うと、クラスタカフカの必要性を使用することは何ですか?
A:次の点を考慮して使用してカフカクラスタ:
- クラスタの数は、より多くのノードが、長い時間がメッセージ、グループ全体のスループット低下をコピーするために必要なので、それは、より7より最高ではない、ことはできません。
- 半数以上は、クラスタは、高い特異フォールトトレランスのセットを使用することはできません失敗したため、クラスタの最高の数は、単数形です。
私は公共の数の関心を歓迎し、「返信キーワードのJavaを両手贈り物があるだろう、」!!!私はあなたに成功したインタビューをしたいです!!!
%97%E5%8F%B7 %E4%BA%8C%E7%BB%B4%E7%A0%81.png)