添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
腼腆的小摩托  ·  python ...·  1 年前    · 
  • 消息队列 (Message Queue):在消息的传输过程中保存消息的容器
  • RabbitMQ :实现了高级消息队列协议(AMQP)的开源消息代理软件

消息队列

AMPQ

RabbitMQ

Python连接RabbitMQ

pika安装

pip install pika
import pika
USERNAME = '用户名'
PASSWORD = '密码'
VIRTUAL_HOST = ''
HOST = ''
PORT = 5672
QUEUE = '队列名'
def basic_publish(exchange, routing_key, body):
    # 创建消息队列连接器
    connection = pika.BlockingConnection(
        pika.ConnectionParameters(HOST, PORT, VIRTUAL_HOST, pika.PlainCredentials(USERNAME, PASSWORD)))
    channel = connection.channel()
    # 写数据
    channel.basic_publish(exchange, routing_key, body)
import pika
USERNAME = '用户名'
PASSWORD = '密码'
VIRTUAL_HOST = ''
HOST = ''
PORT = 5672
QUEUE = '队列名'
# 创建消息队列连接器
credentials = pika.PlainCredentials(USERNAME, PASSWORD)
connection = pika.BlockingConnection(pika.ConnectionParameters(HOST, PORT, VIRTUAL_HOST, credentials))
channel = connection.channel()
if __name__ == '__main__':
    # 读数据不消费
    from json import loads
    channel.basic_consume(QUEUE, lambda a, b, c, d: print(loads(d)))
    channel.start_consuming()
import pika
from json import loads
class Q:
    USERNAME = '用户名'
    PASSWORD = '密码'
    VIRTUAL_HOST = ''
    HOST = ''
    PORT = 5672
class QUEUE:
    """队列名称"""
    queue0 = '队列0'
    queue1 = '队列1'
    queue2 = '队列2'
class Mq(QUEUE):
    def __init__(self, q=Q):
        credentials = pika.PlainCredentials(q.USERNAME, q.PASSWORD)
        parameters = pika.ConnectionParameters(q.HOST, q.PORT, q.VIRTUAL_HOST, credentials, heartbeat=0)
        self.connection = pika.BlockingConnection(parameters)
        self.channel = self.connection.channel()
    def basic_consume(self, queue, func=lambda a, b, c, d: print(loads(d))):
        """消费数据(默认不消费)"""
        self.channel.basic_consume(queue, func)
        self.channel.start_consuming()
    def consume(self, queue, func=print):
        """消费数据(默认不报错则消费)"""
        def _func(ch, method, properties, body):
            func(loads(body))
            ch.basic_ack(delivery_tag=method.delivery_tag)  # 不报错则消费
        self.basic_consume(queue, _func)
    def queue_declare(self, queue):
        """声明队列"""
        self.channel.queue_declare(queue)
        print('declare queue:', queue)
    def queue_delete(self, queue):
        """删除队列"""
        self.channel.queue_delete(queue)
        print('delete queue:', queue)
    def basic_publish(self, queue, body):
        """生产数据"""
        self.channel.basic_publish(exchange='', routing_key=queue, body=body)
if __name__ == '__main__':
    Mq().basic_consume(QUEUE.queue0, func=lambda a, b, c, d: print(d))
def multiprocess(functions):
    from multiprocessing import Process
    pool = [Process(target=f) for f in functions]
    for p in pool:
        p.start()
    for p in pool:
        p.join()
def multithreading(functions):
    from threading import Thread
    pool = [Thread(target=f) for f in functions]
    for p in pool:
        p.start()
    for p in pool:
        p.join()
def _f():
    print(0)
    from time import sleep
    sleep(1.5)
    print(1)
if __name__ == '__main__':
    multithreading([_f, _f])
    # multiprocess([_f, _f])
                    消息队列(Message Queue):在消息的传输过程中保存消息的容器RabbitMQ:实现了高级消息队列协议(AMQP)的开源消息代理软件Python连接RabbitMQpika安装生产者消费者封装自用
				
最近在研究redis做消息队列时,顺便看了一下RabbitMQ消息队列的实现。以下是总结的RabbitMQ中三种exchange模式的实现,分别是fanout, direct和topic。 base.py: import pika # 获取认证对象,参数是用户名、密码。远程连接时需要认证 credentials = pika.PlainCredentials("admin", "admin") # BlockingConnection(): 实例化连接对象 # ConnectionParameters(): 实例化链接参数对象 connection = pika.BlockingConne
1. JobPool用来存放所有Job的元信息。 2. DelayBucket是一组以时间为维度的有序队列,用来存放所有需要延迟的Job(这里只存放Job Id)。 3. Timer负责实时扫描各个Bucket,并将delay时间大于等于当前时间的Job放入到对应的Ready Queue。 4. ReadyQueue存放处于Ready状态的Job(这里只存放JobId),以供消费程序消费。 在消费rabbitMQ队列时, 每次进入回调函数内需要进行一些比较耗时的操作;操作完成后给rabbitMQ server发送ack信号以dequeue本条消息。 问题就发生在发送ack操作时, 程序提示链接已被断开或socket error。 #!/usr/bin #coding: utf-8 import pika import time USER = 'guest' PWD = 'guest' TEST_QUEUE = 'just4test' def callback(ch, method, properties, body): print(body) time. (二)、python操作rabbit mq rabbitmq配置安装基本使用参见上节文章,不再复述。 若想使用python操作rabbitmq,需安装pika模块,直接pip安装: pip install pika 1.最简单的rabbitmq producer端与consumer端对话: producer: #Author :ywq import pika auth=pika.PlainCredentials('ywq','qwe') #save auth indo connection = pik 工作中经常用到rabbitmq,而用的语言主要是python,所以也就经常会用到python中的pika模块,但是这个模块的使用,也给我带了很多问题,这里整理一下关于这个模块我在使用过程的改变历程已经中间碰到一些问题的解决方法 关于MQ: MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过队列来通信。队列的使用除去了   众所周知,RabbitMQ是一个开源的高性能的消息队列,支持多种开发语言:Java,Python,.Net,C,C++,PHP等多种语言,那么如何通过Python语言调用RabbitMQ呢?Python中pika这个模块提供了完整的调用方法,通过这个包我们可以实现Rabbit的简单模式,交换机模式以及一些特殊的参数。那么我们如何使用pika模块呢,接下来,请看听我慢慢道来。 一、简单模式 简单模式下,有多个消费者时,采用轮询方式处理消息。 import pika if __name_
lk1521769532: 在我进行使用jieba.load_userdict('resource/user_dict.txt')。 该字典中已经存在有"CW30 lidar"这个词汇。 由于是空格连接的词。即使添加下面这句话 jieba.re_han_default = re.compile('([\u4E00-\u9FD5a-zA-Z0-9+ 、 ]+)', re.U)。仍然匹配不到"CW30 lidar"。只能再使用load_add_word("CW30 lidar")才可以。