RabbitMQ 4 にPythonクライアント(pika)からメッセージを送信、受信する

以前も試したことがありますが、各種バージョンが上がっているので再度試してみます。
RabbitMQにPythonクライアント(pika)からメッセージを送信、受信する



pikaのインストール


接続用のライブラリpikaをインストールします。

$ pip install pika



aptでインストールする場合

$ sudo apt install python3-pika



pipでは1.3.2、aptでは1.2.0がインストールされました。



送信サンプル


送信のサンプルです。

・send.py

  1. import pika
  2. # ユーザー名とパスワード
  3. credentials= pika.PlainCredentials('symfo', 'P@ssw0rd')
  4. # 接続パラメーター作成
  5. connect_param = pika.ConnectionParameters(
  6.                     host='192.168.11.202',
  7.                     credentials=credentials)
  8. # コネクション作成
  9. connection = pika.BlockingConnection(connect_param)
  10. channel = connection.channel()
  11. channel.queue_declare(queue='hello')
  12. channel.basic_publish(exchange='',
  13.                      routing_key='hello',
  14.                      body='Hello World!')
  15. print("[x] Sent 'Hello World!")
  16. connection.close()



ローカルホストアクセスの場合は必要ありませんが、
リモートサーバーに接続する場合はユーザーとパスワードの指定が必要です。

こちらで作成したユーザーを指定しました。
RabbitMQ 4 Web Interfaceの有効化とログインユーザーの作成


管理画面を見ると、キューに1つ追加されたことがわかります。
c54_01.png


コマンドでも現在のキューの内容を確認できます。

$ sudo rabbitmqctl list_queues
Timeout: 60.0 seconds ...
Listing queues for vhost / ...
name messages
hello 1





受信のサンプル


受信のサンプルはこうなりました。

・receive.py

  1. import pika, sys, os
  2. def main():
  3.     # ユーザー名とパスワード
  4.     credentials= pika.PlainCredentials('symfo', 'P@ssw0rd')
  5.     # 接続パラメーター作成
  6.     connect_param = pika.ConnectionParameters(
  7.                         host='192.168.11.202',
  8.                         credentials=credentials)
  9.     connection = pika.BlockingConnection(connect_param)
  10.     channel = connection.channel()
  11.     channel.queue_declare(queue='hello')
  12.     def callback(ch, method, properties, body):
  13.         print(f" [x] Received {body}")
  14.     channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True)
  15.     print(' [*] Waiting for messages. To exit press CTRL+C')
  16.     channel.start_consuming()
  17. if __name__ == '__main__':
  18.     try:
  19.         main()
  20.     except KeyboardInterrupt:
  21.         print('Interrupted')
  22.         try:
  23.             sys.exit(0)
  24.         except SystemExit:
  25.             os._exit(0)




実行するとメッセージの待受状態になります。
send.pyを実行すると、メッセージが表示されます。

$ python receive.py
[*] Waiting for messages. To exit press CTRL+C
[x] Received b'Hello World!'



関連記事

コメント

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
https://symfo.web.fc2.com/

PR

検索フォーム

月別アーカイブ