ホームページ >Java >&#&チュートリアル >Javaでのメッセージキューのサンプルコード共有

Javaでのメッセージキューのサンプルコード共有

黄舟
黄舟オリジナル
2017-07-24 15:37:521964ブラウズ

この記事では、主に Java メッセージ キューの簡単な実装コードを紹介します。編集者がそれを参考にさせていただきます。編集者をフォローして見てみましょう

今日、採用情報にメッセージキューの要件があるのを見て、思い立ってネットでいろいろ検索しました。

アプリケーションのシナリオを説明するための小さな例を示します

サーバーの処理能力は 1 分あたり 200 メッセージですが、クライアントはピーク時に 1 分あたり 1,000 メッセージを送信する可能性があるとします。時間に応じてキューに入れてから、通常の順序、先入れ後出し (LIFO)、先入れ先出し (FIFO) で処理することができます。自分の状況に応じて決定できます

スタック 先入れ後出しout (LIFO)- -------Java の対応クラス Stack

キュー先入れ先出し (FIFO)----------Java の対応クラス Queue

これらは両方とも可能です以下のようにLinkedlistでカプセル化して実装しました 自分で書いたスタックの例です


/** 
 * @author 刘伊凡 
 * --------->>>>>>队列的实现-------------- 
 */ 
public class MyStack<T> { 
  private LinkedList<T> storage = new LinkedList<T>(); 
 
  public synchronized void push(T e) {//需要加上同步 
    storage.addFirst(e); 
  } 
 
  public T peek() { 
    return storage.getFirst(); 
  } 
 
  public void pop() { 
    storage.removeFirst(); 
  } 
 
  public boolean empty() { 
    return storage.isEmpty(); 
  } 
 
  @Override 
  public String toString() { 
    return storage.toString(); 
  } 
 
}

以下はテストクラスです


/** 
 * @author 刘伊凡 
 * 
 */ 
public class StackTest { 
  public static void main(String[] args) { 
    MyStack<String> stack = new MyStack<String>(); 
    for(String s : "the prefect code".split(" ")){//LIFO 
      stack.push(s); 
    } 
    while(!stack.empty()){ 
      System.out.print(stack.peek()+" "); 
      stack.pop(); 
    } 

    System.out.println(); 
    for(char s : "写了个一句话倒起来说的程序".toCharArray()){//用例:正话反说 
      stack.push(String.valueOf(s)); 
    } 
    while(!stack.empty()){ 
      System.out.print(stack.peek()); 
      stack.pop(); 
    } 
  } 
}

昔、学校で考えさせられました。夜のパーティーでは、司会者が人々をステージに上げて質問に答え、賞品を獲得させます。その質問の 1 つは、司会者が発言し、その後、出場者たちに起立して私たちのプログラムが一致していると言うよう求めるというものでした。ニーズがあります、笑、Java を使用して学んだことをチートして適用できます

メッセージ キュー アプリケーションのシナリオ、補足 (インターネットから)

個人的には、メッセージ キューの主な機能は非同期処理だと思います。主な目的は、リクエストの応答時間と分離を削減することです。したがって、主な使用シナリオは、時間がかかり、結果をメッセージとして即時 (同期) 返す必要のない操作をメッセージ キューに入れることです。同時に、メッセージ キューの使用により、メッセージの形式が変更されない限り、メッセージの送信者と受信者は相互に連絡したり、相互に影響を受けたりする必要がなくなります。つまり、分離や要約が必要になります。

使用シナリオの例:

ユーザーがソフトウェアに登録すると、サーバーはユーザーの登録リクエストを受信した後、次の操作を実行します:

そうでない場合は、ユーザー名とその他の情報を確認します。データベースにユーザーレコードを追加します

メールで登録すると、登録が完了したことを示すメールが送信されます

携帯電話で登録すると、テキストメッセージが送信されます

ユーザーの個人情報を順番に分析します。今後彼に何かを勧めたい同じ考えの人、またはその人たちに彼を勧めます

操作ガイドを含むシステム通知をユーザーに送信

etc...

しかしユーザーにとっては登録機能実際に必要なのは、サービスが提供されている限り、最初のステップだけです。ユーザーは自分のアカウント情報をデータベースに保存した後、ログインして必要な操作を行うことができます。その他のことについては、このリクエストで完了する必要がありますか?ユーザーにとって重要ではない事柄にあなたが対処してくれるまで待つ価値はあるでしょうか?したがって、実際には、最初のステップが完了すると、サーバーは他の操作を対応するメッセージ キューに入れて、すぐにユーザー結果を返すことができ、メッセージ キューはこれらの操作を非同期で実行します。

あるいは、多数のユーザーが同時にソフトウェアに登録する別の状況もあり、同時実行性が高い状況では、登録リクエストに電子メール インターフェイスが耐えられない、または大量の計算が発生するなどの問題が発生し始めます。情報を分析すると CPU がいっぱいになります。ユーザー データ レコードはすぐにデータベースに追加されますが、電子メールの送信や情報の分析中にスタックして、リクエストの応答時間が大幅に増加したり、タイムアウトになったりすることがあります。ちょっと不経済です。この状況に直面して、これらの操作は通常、メッセージ キューに入れられます (プロデューサー/コンシューマー モデル)。メッセージ キューは処理に時間がかかりますが、同時に、ユーザーによる他の機能の使用に影響を与えることなく、登録要求を迅速に完了できます。 🎜🎜そのため、ソフトウェアの通常の機能開発では、わざわざメッセージキューの使用シナリオを探す必要はなく、パフォーマンスのボトルネックが発生した場合に、ビジネスロジックに処理可能な時間のかかる操作があるかどうかを確認します。その場合は、メッセージ キューを導入してこの問題を解決できます。そうしないと、メッセージ キューをやみくもに使用すると、メンテナンスと開発のコストが増加する可能性がありますが、パフォーマンスの大幅な向上は達成できず、利益に見合う価値はありません。 🎜

以上がJavaでのメッセージキューのサンプルコード共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。