IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Rabbitmq/python/RPC -> 正文阅读

[网络协议]Rabbitmq/python/RPC

?rpc_server.py

import pika

connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue_declare('rpc_queue')


def fib(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fib(n - 1) + fib(n - 2)


def on_request(ch, method, props, body):
    n = int(body)

    print("[.] fib(%s)" % n)
    response = fib(n)  # 斐波那契的执行结果赋值给reponse
    # 再把得到的消息发回给客户端
    ch.basic_publish(exchange='',
                     routing_key=props.reply_to,
                     properties=pika.BasicProperties(
                         correlation_id=props.correlation_id
                     ),
                     body=str(response))
    ch.basic_ack(delivery_tag=method.delivery_tag)  # 确保消息被消费,代表任务完成


# channel.basic_qos(prefetch_count=1)
channel.basic_consume(
    'rpc_queue', on_request)

print(" [x] Awaiting RPC request")
channel.start_consuming()

?rpc_client.py

import pika
import uuid


class FibonacciRpcClient(object):
    def __init__(self):
        self.response = None
        self.corr_id = str(uuid.uuid4())

        self.connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost', virtual_host='/'))
        self.channel = self.connection.channel()
        result = self.channel.queue_declare('', exclusive=True)
        self.callback_queue = result.method.queue  # 获取queue名字
        self.channel.basic_consume(self.callback_queue,
                                   self.on_response,  # 只要收到就调用on_response()
                                   auto_ack=True
                                   )

    def on_response(self, ch, method, props, body):
        if self.corr_id == props.correlation_id:  # 判断服务器端corr_id和本地corr_id相等,才往下走
            self.response = body  # response收到body的消息表示response不为空
            self.channel.stop_consuming()

    def call(self, n):
        self.channel.basic_publish(exchange='',
                                   routing_key='rpc_queue',
                                   properties=pika.BasicProperties(
                                       reply_to=self.callback_queue,  # 指定返回到那个queue
                                       correlation_id=self.corr_id,
                                   ),
                                   body=str(n)
                                   )  # 传字符串,把n传进来

        # 定义超时回调函数
        def out_of_time():
            self.response = b'-1'
            self.channel.stop_consuming()

        self.connection.call_later(2, out_of_time)
        self.channel.start_consuming()
        return int(self.response)


fibonacci_rpc = FibonacciRpcClient()
request_num = 11
print(" [x] Requesting fib(%r)" % request_num)
response = fibonacci_rpc.call(request_num)
if response == -1:
    print(" [.] Expired....")
print(" [.] Got %r" % response)
D:\source\python\pikatest\Scripts\python.exe C:/Users/Administrator/PycharmProjects/pythonProject/rabbitmq/rpc_client3.py
 [x] Requesting fib(11)
 [.] Got 89

Process finished with exit code 0

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 12:47:24  更:2022-04-04 12:48:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:37:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码