改过自新的拉比https://github.com/MidTin/rabbitrpc

rabbitmq-rpc的Python项目详细描述


基于rabbitmq的RPC,克隆自here

如何使用

原始代码只能在控制台中运行,在windows(服务器端)中有问题。所以我修改了一些代码。 现在,服务器端同时支持两者鼠兔块连接以及pika.SelectionConnection连接. 在BlockConnection模式下,服务器端只能在单线程中运行。在选择连接模式下, 服务器可以在多线程中运行(而不是在windows中)。在

  • 安装:
pip install rabbitmq-rpc
  • 用法:
    1.在rabbitmq服务器中创建rabbitmq帐户。
    2.运行服务器.py先跑后跑客户端.py在

  • 在服务器.py在

^{pr2}$
  • 在客户端.py在
fromrabbitmq_rpc.clientimportRPCClientimporttimedefadd(i):t1=time.time()client=RPCClient(amqp_url='amqp://yourname:yourpasswd@10.147.17.135:5672/')res=client.call_add(0,i)t2=time.time()print(f"{0} + {i} = {res} RPC Time Cost: {t2-t1:.2f}")returnresforiinrange(300):obj=add(i)
  • 带烧瓶的客户:带烧瓶的客户_烧瓶.py在
fromrabbitmq_rpc.clientimportRPCClientimportflaskweb=flask.Flask(__name__)web.debug=Trueimporttimedefadd(i):t1=time.time()client=RPCClient(amqp_url='amqp://yourname:yourpasswd@10.147.17.135:5672/')res=client.call_add(0,i)t2=time.time()print(f"{0} + {i} = {res} RPC Time Cost: {t2-t1:.2f}")returnres@web.route('/web/<n>')deftest_web(n):res=add(int(n))returnstr(res)if__name__=='__main__':# Notice, In default, flask enabled threading. # If single-thread is needed, pass in 'threaded=False' optionweb.run(host='0.0.0.0',use_reloader=False)

*注意:RPCClient不是线程安全的。这是因为pika不是线程安全的。 因此,只在一个线程中创建一个RPCClient对象。不要在多线程中使用它。*在

原始README

注意:用rabbitmq_rpc

==========
Rabbit RPC 
==========

简述
----

这是对 RabbitMQ 的 Pika_ 库进行封装的,一套简易 RPC 客户端/服务端库。


安装说明
--------

::

    pip install rabbit-rpc
    


使用事例
--------

服务端
~~~~~~

::

    # project/consumers.py

    from rabbit_rpc.consumer import consumer

    @consumer(name='add')
    def add(a, b):
        return a + b


    # project shell
    rabbit_rpc worker --amqp 'amqp://guest:guest@localhost:5672/'


    # with django

    rabbit_rpc worker --amqp 'amqp://guest:guest@localhost:5672/' --django project
    


客户端
~~~~~~

::
    
    from rabbit_rpc.client import RPCClient

    client = RPCClient(amqp_url='amqp://guest:guest@localhost:5672/')
    ret = client.call_add(1, 1, timeout=1)

    # or ignore result
    client.call_add(1, 1, ignore_result=True)

    # specify routing_key
    client.call_add(1, 1, routing_key='default')


.. _Pika: https://github.com/pika/pika

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在表被注释到配置之前获取表的元数据?   java滚动条不会出现在JList上   java JOGL监视器GPU内存   java为什么要使用RecyclerView onDraw延迟   java定制Oppo Reno 2 Z CPH1951(手机型号)的固件(闪存文件)   java自定义线程池执行器   java如何解决发布版本中重复的jar条目[com/安卓/volley/R.class]?   java如何使用Bukkit API触发事件?   java在blazemeter jmeter RTE插件中使用ctrl+w输入   C#/Visual Studio的java JDT等价物   java为什么当maxread值很大而收到的消息数量很小时,卡夫卡消费者会无限期消费?   java游戏2。x:包含模板列表的绑定模型   带压缩的java日志旋转   运行时。exec用java运行程序读取它正在做什么