zoukankan      html  css  js  c++  java
  • RabbitMQ BasicGet与BasicConsume的区别

    在RabbitMQ中消费者有2种方式获取队列中的消息:

    a)  一种是通过basic.consume命令,订阅某一个队列中的消息,channel会自动在处理完上一条消息之后,接收下一条消息。(同一个channel消息处理是串行的)。除非关闭channel或者取消订阅,否则客户端将会一直接收队列的消息。

    b)  另外一种方式是通过basic.get命令主动获取队列中的消息,但是绝对不可以通过循环调用basic.get来代替basic.consume,这是因为basic.get RabbitMQ在实际执行的时候,是首先consume某一个队列,然后检索第一条消息,然后再取消订阅。如果是高吞吐率的消费者,最好还是建议使用basic.consume。

    简单总结一下就是说:

    consume是只要队列里面还有消息就一直取。

    get是只取了队列里面的第一条消息。

    因为get开销大,如果需要从一个队列取消息的话,首选consume方式,慎用循环get方式。

    转载于:https://www.cnblogs.com/SupPilot/p/10218377.html

     
     
     
     
     def remove(self, item) -> list:
            """Removes the item from the queue. Goes through the entire queue, similar to view_queue, and acknowledges
            the msg in the list that matches, and returns the msg.
            If item matches more than one message on the queue, only one is deleted
            """
    
            if isinstance(item, list):
                if not (isinstance(i, bytes) for i in item):
                    print("Item must be a list of only byte objects")
            if not isinstance(item, bytes):
                print("Item must be a singe bytes object")
                raise TypeError
    
            connection = pika.BlockingConnection(
                pika.ConnectionParameters(host=self.host))
    
            msgs = []
            while True:
                chl = connection.channel()
                method_frame, header_frame, body = chl.basic_get(queue='test')
                if method_frame:
                    print('body: ', body)
                    if body == item:
                        print("item found!")
                        msgs.append(body)
                        chl.basic_ack(method_frame.delivery_tag)
                        connection.close()
                        return msgs
    
                else:
                    print("Message not found")
                    connection.close()
                    break
            return msgs


  • 相关阅读:
    Appium Android 元素定位方法 原生+H5
    Eclipse下Python的MySQLdb的安装以及相关问题
    Python模块包中__init__.py文件的作用
    如何调用另一个python文件中的代码
    Python单元测试框架unittest使用方法讲解
    python利用unittest进行测试用例执行的几种方式
    python随机生成手机号码
    eclipse 安装python后pydev不出现
    Appium 如何模拟返回按键
    python分布式进程
  • 原文地址:https://www.cnblogs.com/ExMan/p/14919854.html
Copyright © 2011-2022 走看看