# encoding:utf-8
"""
用于接收发送AMQP消息操作
"""
import json
import time
import pika
class AmqpConnect:
"""AMQP消息收发"""
def __init__(self,host,port,virtual_host ,rabbitmq_username ,rabbitmq_password ,queue_name ,exchange_name ,routing_key ):
super().__init__()
self.host = host
self.port = port
self.virtual_host = virtual_host
self.rabbitmq_username = rabbitmq_username
self.rabbitmq_password = rabbitmq_password
self.queue_name = queue_name
self.exchange_name = exchange_name
self.routing_key = routing_key
def amqp_connect(self):
"""amqp链接"""
connection = pika.BlockingConnection(pika.ConnectionParameters(host=self.host, port=self.port,
virtual_host=self.virtual_host,credentials=pika.PlainCredentials(self.rabbitmq_username,
self.rabbitmq_password)))
channel = connection.channel(channel_number=1)
channel.queue_declare(queue=self.queue_name, durable=True,exclusive=False,auto_delete=False)
channel.queue_bind(self.queue_name,self.exchange_name,routing_key=self.routing_key)
self.channel, self.connection = channel, connection
return self.channel
@staticmethod
def join_headers(**kwargs):
"""拼接消息头信息"""
headers = dict()
for key, value in kwargs.items():
headers[str(key)] = value
return headers
def publish_message(self,msg,**kwargs):
"""发送amqp消息"""
headers = AmqpConnect.join_headers(**kwargs)
AmqpConnect.amqp_connect(self).basic_publish(exchange=self.exchange_name,routing_key=self.routing_key,
properties=pika.BasicProperties(delivery_mode=2, priority=0,headers=headers),body=msg)
print("Send message {}".format(msg))
AmqpConnect.amqp_connect(self).close()
AmqpConnect.amqp_connect(self).connection.close()
@staticmethod
def get_timestamp():
return int(time.time())*1000
message = json.dumps(
{
"test": False,
"orderPro": None,
"payment": None,
"rejected": None,
"own": False,
"scanDeliver": False,
"scanDeliverQr": None
})
head = {"Content-Type":"text/plain;charset=UTF-8"}
AmqpConnect(host="", port="", virtual_host="", rabbitmq_username="",
rabbitmq_password="", queue_name="", exchange_name="",
routing_key="").publish_message(message, **head)
第一次尝试发送AMQP请求。
解析步骤:
第一步:
第一步:Amqpconnect类下面定义一个构造函数,存储rabbit MQ需要的连接信息;
第二步:amqp连接,需要导入pika
第三步:发送ampq消息,我在发送消息的时候,请求头和请求消息没有封装,直接赋值,也可以用封装的请求头和请求消息来发送amqp消息。
参考网址:
https://www.cnblogs.com/suntao-jupyter/p/14603024.html