首先先上一个rabbitmq的工作示意图,这种情况是rabbitmq最简单的一种通信,之后有时间会上多exchange之间的消息交互的文章,也欢迎大家一起学习,一起讨论。
代码实现:
客户端client1(发送端)
import uuid
from time import time, sleep
import traceback
import pika
import threading
class Rpc_cilent(object):
_queue = {}
_internal_lock = threading.RLock()
def __init__(self, id, host="127.0.0.1", port=5672, username="guest", password="guest", v_host="/"):
'''交换机,可认为是网络交换机,只要连接在同一个交换机上的队列都可以进行通信'''
self._exchange_name = "wu_queue"
self._callback_queue_name = "rpc_client_{}".format(id) # 当前客户端与交换机连接的队列
self._routing_key = "server_rpc_{}".format(id) # 当前客户端的地址(唯一标识)
self._broker_url = "amqp://{}:{}@{}:{}{}".format(username, password, host, port, v_host)
self._param = pika.URLParameters(self._broker_url)
self._thread = threading.Thread(target=self._run)
self._thread.setDaemon(False)
self._thread.start()
def _run(self):
print("已运行")
try:
self.__connect()
self.__process_data_event()
except Exception as e:
sleep(5)
print("_run connection exception : {}".format(traceback.format_exc()))
def __connect(self):
# 创建rabbitmq连接对象
self._connection = pika.BlockingConnection(parameters=self._param)
# print("创建rabbitmq对象")
# 创建信道
self._channel = self._connection.channel()
# 声明或创建交换机
# exchange:交换机的名称
# exchange_type:交换机的类型