序章


アプリケーションとプロセス間でのメッセージの送受信に関しては、多くのソリューションから選択できます。 それらにはすべて長所と短所があります。したがって、最善の方法は、要件をクロスチェックし、利用可能なさまざまなソリューションと照合することです。

Apache Qpid は、展開スタックのさまざまな要素間の高度なメッセージングのニーズを解決するのに役立つAdvanced Message Queuing Protocol(AMQP)を実装するオープンソースメッセージングシステムの1つです。

メッセージング、メッセージブローカー、およびキュー


メッセージングは、プロセス、アプリケーション、およびサーバー(仮想および物理)間で特定のデータを交換する方法です。 交換されるこれらのメッセージは、特定のエンジニアリングニーズに役立ち、プレーンテキストメッセージからさまざまなニーズに対応するバイナリデータのブロブまで、あらゆるもので構成できます。 これを機能させるには、サードパーティプログラム(ミドルウェア)によって管理されるインターフェイスが必要です。MessageBrokersを歓迎します。

メッセージブローカーは通常、交換セットアップの各段階をカバーする専用の部分を備えたアプリケーションスタックです。 メッセージの受け入れからキューに入れて要求側に配信するまで、ブローカーは、データベースやcronの使用など、専用でないソリューションや単純なハックでは通常ははるかに困難または面倒な義務を処理します。仕事など それらは、技術的に無限のバッファを構成するキューを処理し、メッセージを配置し、後で自動的にまたはポーリングによって処理されるようにポップアンドデリバリーすることによって機能します。

なぜそれらを使用するのですか?


これらのメッセージブローキングソリューションは、さまざまなサービスの仲介者のように機能します(例: Webアプリケーション)。 通常は処理にかなりの時間がかかるタスクを、それらを実行することを唯一の仕事とするサードパーティに委任できるため、Webアプリケーションサーバーによる負荷と配信時間を大幅に削減するために使用できます。 労働者)。 また、ある場所から別の場所に情報を渡すために、より「保証された」永続性が必要な場合にも役立ちます。

いつ使用しますか?


まとめると、説明されているコア機能は、を含むがこれに限定されないを含む多数の領域をカバーするように拡張されます。

  • リソースを大量に消費する手順をその場で実行することを強制されるのではなく、Webサーバーが要求に迅速に応答できるようにする

  • 消費のために複数の受信者にメッセージを配信する(つまり 処理)

  • オフラインパーティーを許可する(例: 切断されたユーザー)データを永久に失うのではなく、後でフェッチします

  • バックエンドシステムへの完全非同期機能の導入

  • タスクの順序付けと優先順位付け

  • 労働者間の負荷のバランス

  • アプリケーションの信頼性と稼働時間を大幅に向上

  • とはるかに。

Apache Qpid


Apache Software Foundationには、メッセージングに関していくつかのソリューションがあり、そのうちの1つはApache Qpid:FoundationによるAMQPの実装です。 開発者が独自のソリューションを作成するのを支援することを目的としたいくつかのより基本的なアプリケーションとは異なり、Qpidは、RabbitMQと同様に、キューイング、セキュリティとトランザクションの管理、クラスタリング、プラグ可能なレイヤーを介した永続化などが可能な優れたツールセットを提供します。 そのAPIは、デフォルトで複数のプログラミング言語をサポートし、C ++(Perl、Python、Ruby、.NETなど)とJava(JMS API)ブローカーの両方が付属しています。 RabbitMQと並んで、Qpidがおそらく最も人気のある選択肢です。

他とどう違うの?


本格的なメッセージブローカーは、表面的にはわずかに異なります。 しかし、内部を深く調べると、物事がどのように機能するかの背後にある真実が明らかになります。 以下は、ApacheQpidを他の機能と比較して際立たせる機能です。

  • 別のブローカーに接続することによるクライアントフェイルオーバーの検出と自動修復

  • 異なるサーバー間でキューを複製することによる簡単なクラスタリング

  • クラスタでのデフォルトのエラー処理

  • プラグ可能なアーキテクチャを介した簡単な永続化により、高可用性を提供します

  • もっと。

Advanced Message Queuing Protocol(AMQP)の概要


AMQPは、送信元から宛先にメッセージを配信および転送するための広く受け入れられているオープンソース標準です。 プロトコルおよび標準として、さまざまなアプリケーションとメッセージブローカーミドルウェアが、個別に設定された設計上の決定によって引き起こされる問題に遭遇することなく相互運用するための共通の基盤を設定します。

ApacheQpidのインストール


Apache Qpidを使い始めるということは、2つの異なるツールセットをインストールすることを意味します。

  • 選択したプログラミング言語に応じたQpidBrokerの実装(例: Python用のC++ブローカーまたはJava用のJavaブローカー)

  • Qpidクライアントライブラリ(例: Qpid Python)

注:さまざまな理由から、新しく作成されたドロップレットに対して、ここにリストされているインストールとアクションを実行します。 クライアントに積極的にサービスを提供していて、システムを変更した可能性がある場合は、動作を中断したり、問題が発生したりしないように、新しいシステムで次の手順を試すことを強くお勧めします。

CentOS 6/RHELベースのシステムへのインストール


ドロップレットを更新しましょう:

yum -y update

次に、以下を実行して、Qpid C ++サーバーとそのツール(Pythonバインディングを含む)を取得します。

yum install -y qpid-cpp-server qpid-tools    

必要に応じて、Rubyなどの他の言語用のQpidの言語バインディングのインストールを続行します。

yum install -y ruby-qpid

Ubuntu 13 /Debian7ベースのシステムへのインストール


UbuntuとDebianにApacheQpidをダウンロードしてインストールするプロセスは、CentOSと同様です。

システムのデフォルトのアプリケーションツールセットを更新することから始めましょう。

apt-get    update 
apt-get -y upgrade

次に、以下を実行してQpidC++サーバーとそのツールを入手します。

apt-get install -y qpidd qpid-tools
apt-get install -y libqpidmessaging2-dev python-qpid ruby-qpid

注:インストールプロセス中に、Qpidデーモン管理者用に選択したのパスワードを入力するように求められます。

ApacheQpidの管理


CentOS/RHELベースのシステムでの管理


アプリケーションのステータスを開始、停止、再起動、および確認するには、以下を使用します。

# To start the service:
/sbin/service qpidd start

# To stop the service:
/sbin/service qpidd stop

# To restart the service:
/sbin/service qpidd restart
    
# To check the status:
/sbin/service qpidd status

# To force reload:
/sbin/service qpidd force-reload

Ubuntu/Debianベースのシステムでの管理


UbuntuとDebianでアプリケーションのステータスを開始、停止、再起動、および確認するには、次を使用します。

# To start the service:
service qpidd start

# To stop the service:
service qpidd stop

# To restart the service:
service qpidd restart
    
# To check the status:
service qpidd status

# To force reload:
service qpidd force-reload

以上です! これで、ドロップレットで動作する独自のApacheQpidメッセージブローカーができました。

Qpidとその膨大な構成オプションの詳細については、C++実装およびJava実装のドキュメントを確認してください。

ApacheQpidの操作


QpidとそのPython言語バインディングをインストールした後、簡単なQpidの例を調べて、Qpidの操作の基本を理解しましょう。

nanoを使用して(サンプル)hello_world.pyファイルを作成します。

nano hello_world.py

以下の自明のモジュールを貼り付けます。

# Import the modules we need
from qpid.messaging import *

broker     = "localhost:5672" 
address    = "amq.topic" 
connection = Connection(broker)

try:
    connection.open()

    # Define the session
    session = connection.session()

    # Define a sender *and* a receiver
    sender   = session.sender(address)
    receiver = session.receiver(address)

    # Send a simple "Hello world!" message to the queue
    sender.send(Message("Hello world!"));

    # Fetch the next message in the queue
    message = receiver.fetch()

    # Output the message
    print message.content

    # Check with the server
    session.acknowledge()

except MessagingError, err:
    print err

finally:
    connection.close()

CTRL + Xを押し、Yで確定して保存して終了します。

上記のスクリプトを実行すると、メッセージが表示されます(つまり、 Hello world!)を出力として使用します。

python hello_world.py
# Hello world!

問題が発生した場合は、qpidが実行されていることを確認してください。 上記のコマンドを使用して開始できます。

投稿者: https ://twitter.com/ostezer