|
|
@@ -0,0 +1,101 @@
|
|
|
+import pika
|
|
|
+import tkinter as tk
|
|
|
+from tkinter import ttk
|
|
|
+import threading
|
|
|
+
|
|
|
+# RabbitMQ 配置
|
|
|
+RABBITMQ_HOST = '101.201.78.54'
|
|
|
+RABBITMQ_PORT = 5672
|
|
|
+RABBITMQ_QUEUE = 'file_matches'
|
|
|
+RABBITMQ_USERNAME = 'admin' # RabbitMQ 用户名
|
|
|
+RABBITMQ_PASSWORD = 'zpq123456' # RabbitMQ 密码
|
|
|
+
|
|
|
+class RabbitMQReceiver:
|
|
|
+ """RabbitMQ 消息接收器"""
|
|
|
+ def __init__(self, root):
|
|
|
+ self.root = root
|
|
|
+ self.root.title("RabbitMQ 消息接收器")
|
|
|
+ self.root.geometry("400x300")
|
|
|
+
|
|
|
+ # 创建主框架
|
|
|
+ self.main_frame = ttk.Frame(root, padding="10")
|
|
|
+ self.main_frame.pack(fill=tk.BOTH, expand=True)
|
|
|
+
|
|
|
+ # 创建标题
|
|
|
+ self.title_label = ttk.Label(self.main_frame, text="接收到的文件名称", font=('Arial', 12, 'bold'))
|
|
|
+ self.title_label.pack(pady=10)
|
|
|
+
|
|
|
+ # 创建消息列表框
|
|
|
+ self.message_list = tk.Listbox(self.main_frame, width=50, height=15)
|
|
|
+ self.message_list.pack(fill=tk.BOTH, expand=True, pady=5)
|
|
|
+
|
|
|
+ # 创建滚动条
|
|
|
+ self.scrollbar = ttk.Scrollbar(self.message_list, orient=tk.VERTICAL, command=self.message_list.yview)
|
|
|
+ self.scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
|
|
|
+ self.message_list.config(yscrollcommand=self.scrollbar.set)
|
|
|
+
|
|
|
+ # 创建状态标签
|
|
|
+ self.status_var = tk.StringVar()
|
|
|
+ self.status_var.set(f"等待接收消息... (队列: {RABBITMQ_QUEUE})")
|
|
|
+ self.status_label = ttk.Label(self.main_frame, textvariable=self.status_var, font=('Arial', 10))
|
|
|
+ self.status_label.pack(pady=10)
|
|
|
+
|
|
|
+ # 启动 RabbitMQ 接收线程
|
|
|
+ self.receive_thread = threading.Thread(target=self.receive_messages, daemon=True)
|
|
|
+ self.receive_thread.start()
|
|
|
+
|
|
|
+ def callback(self, ch, method, properties, body):
|
|
|
+ """处理接收到的消息"""
|
|
|
+ try:
|
|
|
+ # 解码消息
|
|
|
+ file_name = body.decode('utf-8')
|
|
|
+ # 在主线程中更新 UI
|
|
|
+ self.root.after(0, self.update_message_list, file_name)
|
|
|
+ except Exception as e:
|
|
|
+ self.root.after(0, self.update_message_list, f"处理消息时出错: {e}")
|
|
|
+
|
|
|
+ def update_message_list(self, message):
|
|
|
+ """更新消息列表"""
|
|
|
+ self.message_list.insert(tk.END, message)
|
|
|
+ # 自动滚动到最后一行
|
|
|
+ self.message_list.see(tk.END)
|
|
|
+
|
|
|
+ def receive_messages(self):
|
|
|
+ """接收 RabbitMQ 消息"""
|
|
|
+ try:
|
|
|
+ # 建立连接
|
|
|
+ credentials = pika.PlainCredentials(RABBITMQ_USERNAME, RABBITMQ_PASSWORD)
|
|
|
+ connection = pika.BlockingConnection(pika.ConnectionParameters(
|
|
|
+ host=RABBITMQ_HOST, port=RABBITMQ_PORT, credentials=credentials
|
|
|
+ ))
|
|
|
+ channel = connection.channel()
|
|
|
+
|
|
|
+ # 声明队列
|
|
|
+ channel.queue_declare(queue=RABBITMQ_QUEUE, durable=True)
|
|
|
+
|
|
|
+ # 注册回调函数
|
|
|
+ channel.basic_consume(queue=RABBITMQ_QUEUE, on_message_callback=self.callback, auto_ack=True)
|
|
|
+
|
|
|
+ self.root.after(0, self.status_var.set, f"正在接收消息... (队列: {RABBITMQ_QUEUE})")
|
|
|
+
|
|
|
+ # 开始消费消息
|
|
|
+ channel.start_consuming()
|
|
|
+ except Exception as e:
|
|
|
+ error_message = f"连接到 RabbitMQ 失败: {e}"
|
|
|
+ self.root.after(0, self.status_var.set, error_message)
|
|
|
+ self.root.after(0, self.update_message_list, error_message)
|
|
|
+ finally:
|
|
|
+ if 'connection' in locals() and connection.is_open:
|
|
|
+ connection.close()
|
|
|
+
|
|
|
+def main():
|
|
|
+ """主函数"""
|
|
|
+ # 创建 tkinter 根窗口
|
|
|
+ root = tk.Tk()
|
|
|
+ # 创建 RabbitMQ 接收器
|
|
|
+ receiver = RabbitMQReceiver(root)
|
|
|
+ # 启动 tkinter 主循环
|
|
|
+ root.mainloop()
|
|
|
+
|
|
|
+if __name__ == "__main__":
|
|
|
+ main()
|