پیامها در RabbitMQ میتوانند هر نوع دادهای باشند، اما برای ارسال آنها بین برنامهها، معمولاً نیاز به Serialization داریم. Serialization فرآیندی است که دادهها را به یک فرمت قابل انتقال تبدیل میکند و در سمت دریافت، با Deserialization دوباره به داده اصلی تبدیل میشوند.
فرمت JSON
JSON یکی از رایجترین فرمتها برای تبادل دادهها است و به دلیل سازگاری با اکثر زبانها و قابلیت خوانایی انسانی محبوب است. در Python میتوان از کتابخانه json
استفاده کرد.
import pika
import json
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='json_queue')
# دادهای برای ارسال
data = {"user": "Alice", "action": "login"}
# تبدیل داده به JSON و ارسال
channel.basic_publish(exchange='',
routing_key='json_queue',
body=json.dumps(data))
print("پیام JSON ارسال شد")
connection.close()
فرمت Pickle
Pickle یک روش Serialization بومی Python است که دادهها و اشیاء پیچیده Python را میتواند مستقیم به بایت تبدیل کند. این روش برای پروژههای فقط Python مناسب است.
import pika
import pickle
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='pickle_queue')
# دادهای برای ارسال
data = {"user": "Bob", "action": "logout"}
# تبدیل داده به بایت با Pickle و ارسال
channel.basic_publish(exchange='',
routing_key='pickle_queue',
body=pickle.dumps(data))
print("پیام Pickle ارسال شد")
connection.close()
توضیح تفاوتها
- JSON قابلیت خوانایی و سازگاری بین زبانهای مختلف را دارد.
- Pickle فقط برای Python کاربرد دارد و دادههای پیچیدهتر را بدون تبدیل میتواند ارسال کند.
- JSON حجم پیام کمتر و امنیت بالاتری نسبت به Pickle دارد، اما Pickle انعطافپذیری بیشتری در ارسال اشیاء Python ارائه میدهد.
جمعبندی
انتخاب روش Serialization به نوع داده و نیازهای پروژه بستگی دارد. برای سیستمهای چند زبانه و پیامهای متنی، JSON مناسب است و برای پروژههای داخلی Python و اشیاء پیچیده، Pickle گزینه بهینه محسوب میشود. استفاده از این روشها باعث میشود پیامها به درستی بین Producer و Consumer منتقل شوند و دادهها قابل پردازش باشند.