• python之RabbitMQ


    一、安装RabbitMQ

    1. 安装erlang

    1
    2
    3
    4
    tar xf otp_src_18.3.tar.gz
    cd otp_src_18.3
    ./configure --prefix=/mapbar/app/erlang
    make && make install

    2. 安装rabbitMQ

    1
    2
    3
    4
    5
    6
    tar xf rabbitmq-server-generic-unix-3.6.0.tar.xz
    mv rabbitmq_server-3.6.0 /mapbar/app/
    ln -s /mapbar/app/rabbitmq_server-3.6.0 /mapbar/app/rabbitmq
    启动:
    cd /mapbar/app/rabbitmq/sbin/
    ./rabbitmq-server -detached

    3.安装API

    1
    pip install pika

    二、Python操作RabbitMQ

    1,基本用法

    生产者:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    mport pika
     
    connection=pika.BlockingConnection(pika.ConnectionParameters(host='192.168.10.131')) 
    #创建一个链接对象,对象中绑定rabbitmq的IP地址
      
    channel=connection.channel()        #创建一个频道
      
    channel.queue_declare(queue='name1'#通过这个频道来创建队列,如果MQ中队列存在忽略,没有则创建
      
    channel.basic_publish(exchange='',
                          routing_key='name1',   #指定队列名称
                          body='Hello World!')   #往该队列中发送一个消息
    print(" [x] Sent 'Hello World!'")
    connection.close()                           #发送完关闭链接

    消费者:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    import pika
      
    connection = pika.BlockingConnection(pika.ConnectionParameters(host='192.168.10.131'))
    #创建一个链接对象,对象中绑定rabbitmq的IP地址
      
    channel = connection.channel()         #创建一个频道
      
    channel.queue_declare(queue='name1')   #通过这个频道来创建队列,如果MQ中队列存在忽略,没有则创建
      
    def callback(ch, method, properties, body):   #callback函数负责接收队列里的消息
        print(" [x] Received %r" % body)
      
    channel.basic_consume(callback,              #从队列里去消息
                          queue='name1',         #指定队列名
                          no_ack=True)
      
    print(' [*] Waiting for messages. To exit press CTRL+C')
    channel.start_consuming()

    2,发布订阅

       发布订阅和简单的消息队列区别在于,发布订阅会将消息发送给所有的订阅者,而消息队列中的数据被消费一次便消失。所以,RabbitMQ实现发布和订阅时,会为每一个订阅者创建一个队列,二发布者发布消息时,会将消息放置在所有相关队列中。

       在RabbitMQ中,所有生产者提交的消息都有Exchange来接收,然后Exchange按照特定的策略转发到Queue进行存储,RabbitMQ提供了四种Exchange:fanout、direct、topic、header。由于header模式在实际工作中用的比较少。

       发布者

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15

    import pika
      
    connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
    channel = connection.channel()
      
    channel.exchange_declare(exchange='test_fanout',
                             type='fanout')
      
    message = '4456'
    channel.basic_publish(exchange='test_fanout',
                          routing_key='',
                          body=message)
    print(' [x] Sent %r' % message)
    connection.close()

    订阅者

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    import pika
      
    connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
    channel = connection.channel()
      
    channel.exchange_declare(exchange='test_fanout',        #创建一个exchange
                             type='fanout')                 #任何发送到Fanout Exchange的消息都会被转发到与该Exchange绑定(Binding)的所有Queue上
      
    #随机创建队列
    result = channel.queue_declare(exclusive=True)
    queue_name = result.method.queue
      
    #绑定
    channel.queue_bind(exchange='test_fanout',
                       queue=queue_name)                    #exchange绑定后端队列
      
    print('<------------->')
      
    def callback(ch,method,properties,body):
        print(' [x] %r' % body)
      
    channel.basic_consume(callback,
                          queue=queue_name,
                          no_ack=True)
    channel.start_consuming()









  • 相关阅读:
    Web前端开发
    用javascript向一个网页连接接口发送请求,并接收该接口返回的json串
    如何在tomcat启动的时候运行一个Java类
    Linux永久挂载远程网络目录
    C/C++跨平台的的预编译宏
    利用http实现文件的上传和下载
    基于qml创建最简单的图像处理程序(1)-基于qml创建界面
    基于qml创建最简单的android机图像采集程序
    OpenCV相关网站推荐(Informative websites related to OpenCV)
    (GO_GTD_3)基于OpenCV和QT,建立Android图像处理程序
  • 原文地址:https://www.cnblogs.com/yangruizeng/p/5720688.html
Copyright © 2020-2023  润新知