ホームページ バックエンド開発 Python チュートリアル PythonでRabbitMQを操作してみる(1)

PythonでRabbitMQを操作してみる(1)

Jan 17, 2017 pm 02:47 PM

CDN のコンテンツと稼働状況を管理および監視する分散システムを Python を使用して実装したいと考えていたため、偶然、Yu Feng 氏の「RabbitMQ を選択する理由」など、多くの人に勧められました。等々。

MQ という言葉が登場したとき、私は MQ とは何か、つまり Message Queue (メッセージ キュー) について数時間かけて読みました。名前が示すように、メッセージ キュー、メッセージで満たされたキュー、キュー、データ構造名詞は、先入れ先出しの特性を持つデータ構造です。メッセージ キューはメッセージを配信するために使用されるだけなので、その重要性は何なのか、そのアプリケーション シナリオは何なのか、どのような特徴があるのか​​、独自の利点は何なのか、なぜ使用する必要があるのか​​など、一連の疑問が生じます。私の心には。

何度も検索した結果、メッセージキューはアプリケーション間で情報を転送するための通信方法であるという表面的な理解に達しました。たとえば、複数のサーバーのログを分析する必要がある場合、各サーバーで 1 つのプロセスを使用してデータ (必要な情報) を Mysql データベース テーブルに書き込み、その後、そのデータを読み取るための複数のプロセスを作成できます。分析はあまり良くありませんが、すぐにこの設計の醜さが明らかになりました... 複数のプログラムでキューからデータを取得して処理したいですか?問題ありません。プログラムの数をハードコードしました...何ですか?また、圧力が動的に増減するときに、プログラムが動的に圧力を分散できるようにしますか?これは、非常に人気のある「RabbitMQ+Python Introduction to Classic Rabbit and Rabbit Nest」の例です。考えてみてください。CDN が大量のデータを送信すると、データの配布、処理、すべてが問題になります。しかし、Rabbit がこれらをどのように実装しているのかはまだ理解できません。

概念的に言うと、RabbitMQ は AMPQ (Advanced Message Protocol Queuing) の標準実装です。AMQP に詳しくない人は RabbitMQ のドキュメントを理解できないと言われています。しかし、重要な概念をしっかりと理解することしかできません。 RabbitMQ の実装原理モデル全体を次の図に示します。これは、実際にはルーティング タスク分散キューを備えたプロデューサーおよびコンシューマー モデルです。図に示すように、プロデューサは対応する情報を生成してルータに送信し、ルータは情報内のキー情報に基づいて情報を異なるメッセージ キューに配布し、コンシューマは異なるメッセージ キュー内のデータを読み取ります。の。

PythonでRabbitMQを操作してみる(1)

ブローカー: 簡単に言えば、これはメッセージキューサーバーエンティティです。
Exchange: メッセージスイッチ。どのメッセージがどのキューにルーティングされるかに従ってルールを指定します。
キュー: メッセージキューキャリア、各メッセージは 1 つ以上のキューに入れられます。
バインディング:バインディング、その機能は、ルーティングルールに従ってExchangeとQueueをバインドすることです。
ルーティング キー: ルーティング キーワード、Exchange はこのキーワードに基づいてメッセージを配信します。
vhost: 仮想ホスト。ブローカーで複数の vhost を開いて、異なるユーザーの権限を分離できます。
プロデューサー:メッセージプロデューサーはメッセージを届けるプログラムです。
コンシューマ: メッセージコンシューマは、メッセージを受け入れるプログラムです。
チャネル: クライアントの各接続で複数のチャネルを確立でき、各チャネルがセッション タスクを表します。

メッセージキューの使用手順は大まかに以下のとおりです。

(1) クライアントはメッセージキューサーバーに接続し、チャネルを開きます。
(2) クライアントは交換を宣言し、関連する属性を設定します。
(3) クライアントはキューを宣言し、関連する属性を設定します。
(4) クライアントはルーティング キーを使用して、Exchange と Queue の間のバインディング関係を確立します。
(5)クライアントは交換するメッセージを配信します。

RabbitMQ の一般的なプロセスと利点を理解した後、Fedora で RabbitMQ を試し始めました。

RabbitMQ公式Webサイトによると、インストールはここからダウンロードする必要があります

http://www.rabbitmq.com/download.html

PythonでRabbitMQを操作してみる(1)


クリックして各バージョンのバイナリパッケージをダウンロードしてくださいRabbitmq-server-3.3.0-1.noarch.rpm をダウンロードしました

ダウンロード パス、/home/sun5495/Downloads/

[sun5495@localhost Downloads]# sudo chmod 777 Rabbitmq-server-3.3.0- を入力します。 1.noarch.rpm

実行可能ファイルの権限を変更し、実行権限を増やします。

その後、./rabbitmq-server-3.3.0-1.noarch.rpm を実行すると、実行時にエラーが報告され、インストールできません。

今すぐ Erlang をインストールする必要があることがわかりました。それを完了するには、このコマンド yum install erlang を試してください。

その後、root ユーザーを使用して

rpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc yum install rabbitmq-server-3.3.0-1.noarch.rpm
ログイン後にコピー

を実行すると、インストールは成功します。

RBMQ を起動するように設定するには、管理者アカウントを使用して

chkconfig rabbitmq-server on
ログイン後にコピー

サーバーの開閉コマンド

/sbin/service rabbitmq-server stop/start
ログイン後にコピー

を実行します。その結果、開くときに次のエラーが表示されます
Rabbitmq-server (systemctl 経由) の起動: ジョブ詳細については、「systemctl status Rabbitmq-server.service」および「journalctl -xn」を参照してください。

使用journalctl -xn命令打开日志,查看了下貌似是Erlang的某个文件拒绝访问,然后还提出了一大堆建议。

尝试一下

grep beam.smp /var/log/audit/audit.log | audit2allow -M mypolsemodule -i mypol.pp/sbin/service rabbitmq-server start
ログイン後にコピー

PythonでRabbitMQを操作してみる(1)

既然RabbitMQ安装也运行成功了,那么我就来尝尝RabbitMQ的鲜吧。就从官网上的例子一步一笔来做好了。

由于我使用的是Python,那么就需要安装一些支持RabbitMQ的库来进行操作,其中包括

py-amqplib,txAMQP,pika这几种,按照官网的tutorial,我也安装了pika。

pip install pika
ログイン後にコピー

从最简单的收发消息开始。即一端发送消息,一端接收消息。

PythonでRabbitMQを操作してみる(1)

发送方即生产者,首先要创建与RabbitMQ服务器的连接,

#!/usr/bin/env pythonimport pikaconnection = pika.BlockingConnection(pika.ConnectionParameters(              
 'localhost'))channel = connection.channel()
ログイン後にコピー

此处服务器连接本地localhost,也可以指定ip或者主机名。

其次发送方需要声明一个队列,比如命名为sayhello

channel.queue_declare(queue='sayhello')
ログイン後にコピー

此时我们就可以发送消息了。由于第一个小案例比较简单,没有经过路由器,因此发送消息时,指定路由为空即可。

channel.basic_publish(exchange='',                        
routing_key='hello',                                    
body='hello world')print "Sent ‘hello world'"
ログイン後にコピー

最后关闭连接即可。

connection.close()
ログイン後にコピー

接收方即消费者,需要从队列上获取数据,因此也需要绑定一个队列

channel.queue_declare(queue='hello')
ログイン後にコピー

同时,由于接收方的工作方式是基于队列的消息执行一个回调函数,当收到消息时,Pika就会执行相应的回调函数,因此我们需要定义此函数。

def callback(ch, method, properties, body):    print " [x] Received %r" % (body,)
ログイン後にコピー

接下来我们需要初始化这个消费者,并对消费者进行启动。

channel.basic_consume(callback,                      
queue='hello',                      
no_ack=True)print ' [*] Waiting for messages. To exit press CTRL+C'channel.start_consuming()
ログイン後にコピー

OK执行成功。

接下来就逐步的深入体验RabbitMQ的独特魅力。

以上就是Python操作RabbitMQ初体验(一)的内容,更多相关内容请关注PHP中文网(www.php.cn)!


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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPおよびPython:コードの例と比較 PHPおよびPython:コードの例と比較 Apr 15, 2025 am 12:07 AM

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

Python vs. JavaScript:コミュニティ、ライブラリ、リソース Python vs. JavaScript:コミュニティ、ライブラリ、リソース Apr 15, 2025 am 12:16 AM

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

ターミナルVSCODEでプログラムを実行する方法 ターミナルVSCODEでプログラムを実行する方法 Apr 15, 2025 pm 06:42 PM

VSコードでは、次の手順を通じて端末でプログラムを実行できます。コードを準備し、統合端子を開き、コードディレクトリが端末作業ディレクトリと一致していることを確認します。プログラミング言語(pythonのpython your_file_name.pyなど)に従って実行コマンドを選択して、それが正常に実行されるかどうかを確認し、エラーを解決します。デバッガーを使用して、デバッグ効率を向上させます。

Visual StudioコードはPythonで使用できますか Visual StudioコードはPythonで使用できますか Apr 15, 2025 pm 08:18 PM

VSコードはPythonの書き込みに使用でき、Pythonアプリケーションを開発するための理想的なツールになる多くの機能を提供できます。ユーザーは以下を可能にします。Python拡張機能をインストールして、コードの完了、構文の強調表示、デバッグなどの関数を取得できます。デバッガーを使用して、コードを段階的に追跡し、エラーを見つけて修正します。バージョンコントロールのためにGitを統合します。コードフォーマットツールを使用して、コードの一貫性を維持します。糸くずツールを使用して、事前に潜在的な問題を発見します。

Dockerの原則の詳細な説明 Dockerの原則の詳細な説明 Apr 14, 2025 pm 11:57 PM

DockerはLinuxカーネル機能を使用して、効率的で孤立したアプリケーションランニング環境を提供します。その作業原則は次のとおりです。1。ミラーは、アプリケーションを実行するために必要なすべてを含む読み取り専用テンプレートとして使用されます。 2。ユニオンファイルシステム(UnionFS)は、違いを保存するだけで、スペースを節約し、高速化する複数のファイルシステムをスタックします。 3.デーモンはミラーとコンテナを管理し、クライアントはそれらをインタラクションに使用します。 4。名前空間とcgroupsは、コンテナの分離とリソースの制限を実装します。 5.複数のネットワークモードは、コンテナの相互接続をサポートします。これらのコア概念を理解することによってのみ、Dockerをよりよく利用できます。

VSCODE拡張機能は悪意がありますか? VSCODE拡張機能は悪意がありますか? Apr 15, 2025 pm 07:57 PM

VSコード拡張機能は、悪意のあるコードの隠れ、脆弱性の活用、合法的な拡張機能としての自慰行為など、悪意のあるリスクを引き起こします。悪意のある拡張機能を識別する方法には、パブリッシャーのチェック、コメントの読み取り、コードのチェック、およびインストールに注意してください。セキュリティ対策には、セキュリティ認識、良好な習慣、定期的な更新、ウイルス対策ソフトウェアも含まれます。

Windows 8でコードを実行できます Windows 8でコードを実行できます Apr 15, 2025 pm 07:24 PM

VSコードはWindows 8で実行できますが、エクスペリエンスは大きくない場合があります。まず、システムが最新のパッチに更新されていることを確認してから、システムアーキテクチャに一致するVSコードインストールパッケージをダウンロードして、プロンプトとしてインストールします。インストール後、一部の拡張機能はWindows 8と互換性があり、代替拡張機能を探すか、仮想マシンで新しいWindowsシステムを使用する必要があることに注意してください。必要な拡張機能をインストールして、適切に動作するかどうかを確認します。 Windows 8ではVSコードは実行可能ですが、開発エクスペリエンスとセキュリティを向上させるために、新しいWindowsシステムにアップグレードすることをお勧めします。

Python:自動化、スクリプト、およびタスク管理 Python:自動化、スクリプト、およびタスク管理 Apr 16, 2025 am 12:14 AM

Pythonは、自動化、スクリプト、およびタスク管理に優れています。 1)自動化:OSやShutilなどの標準ライブラリを介してファイルバックアップが実現されます。 2)スクリプトの書き込み:Psutilライブラリを使用してシステムリソースを監視します。 3)タスク管理:スケジュールライブラリを使用してタスクをスケジュールします。 Pythonの使いやすさと豊富なライブラリサポートにより、これらの分野で優先ツールになります。

See all articles