Pika使用入门

作者: 郭大先生_ | 来源:发表于2018-09-04 09:46 被阅读0次

python RabbitMQ队列使用

关于python的queue介绍

  • 关于python的队列,内置的有两种,一种是线程queue,另一种是进程queue,但是这两种queue都是只能在同一个进程下的线程间或者父进程与子进程之间进行队列通讯,并不能进行程序与程序之间的信息交换,这时候我们就需要一个中间件,来实现程序之间的通讯。

RabbitMQ

  • MQ并不是python内置的模块,而是一个需要你额外安装(ubunto可直接apt-get其余请自行百度。)的程序,安装完毕后可通过python中内置的pika模块来调用MQ发送或接收队列请求。接下来我们就看几种python调用MQ的模式(作者自定义中文形象的模式名称)与方法。

RabbitMQ设置远程链接账号密码

启动rabbitmq web服务:

远程访问rabbitmq:自己增加一个用户,步骤如下:

  • l1. 创建一个admin用户:sudo rabbitmqctl add_user admin 123123

  • l2. 设置该用户为administrator角色:sudo rabbitmqctl set_user_tags admin administrator

  • l3. 设置权限:sudo rabbitmqctl set_permissions -p '/' admin '.' '.' '.'

  • l4. 重启rabbitmq服务:sudo service rabbitmq-server restart

之后就能用admin用户远程连接rabbitmq server了。

轮询消费模式

此模式下,发送队列的一方把消息存入mq的指定队列后,若有消费者端联入相应队列,即会获取到消息,并且队列中的消息会被消费掉。

若有多个消费端同时连接着队列,则会已轮询的方式将队列中的消息消费掉。

接下来是代码实例:

producer生产者

# !/usr/bin/env python
  import pika
  credentials = pika.PlainCredentials('admin','123456')
  connection = pika.BlockingConnection(pika.ConnectionParameters(
'192.168.56.19',5672,'/',credentials))
  channel = connection.channel()

  # 声明queue
   channel.queue_declare(queue='balance')

  # n RabbitMQ a message can never be sent directly to the queue, it always needs to go through an exchange.
    channel.basic_publish(exchange='',
                  routing_key='balance',
                  body='Hello World!')
  print(" [x] Sent 'Hello World!'")
  connection.close()

发送过队列后,可在MQ服务器中查看队列状态

  [root@localhost ~]# rabbitmqctl list_queues

  Listing queues ...

  hello    1

consumer消费者

# _*_coding:utf-8_*_
  __author__ = 'Alex Li'
  import pika

  credentials = pika.PlainCredentials('admin','123456')
  connection = pika.BlockingConnection(pika.ConnectionParameters(
'192.168.56.19',5672,'/',credentials))
  channel = connection.channel()

  # You may ask why we declare the queue again ‒ we have already declared it in our previous code.
  # We could avoid that if we were sure that the queue already exists. For example if send.py program
  # was run before. But we're not yet sure which program to run first. In such cases it's a good
# practice to repeat declaring the queue in both programs.
   channel.queue_declare(queue='balance')


  def callback(ch, method, properties, body):
  print(" [x] Received %r" % body)


  channel.basic_consume(callback,
                  queue='balance',
                  no_ack=True)

  print(' [*] Waiting for messages. To exit press CTRL+C')
  channel.start_consuming()

接收队列后,查看一下队列状态

  [root@localhost ~]#  rabbitmqctl list_queues

  Listing queues ...

  hello    0

import pika

credentials = pika.PlainCredentials('wu','123456')
connection = pika.BlockingConnection(pika.ConnectionParameters('127.0.0.1',5672,'simple',credentials))
channel = connection.channel() #在连接上创建一个频道

channel.queue_declare(queue='pikamq') #声明一个队列,生产者和消费者都要声明一个相同的队列,用来防止万一某一方挂了,另一方能正常运行

channel.basic_publish(exchange='', #交换机
                  routing_key='pikamq',  # queue名字 #路由键,写明将消息发往哪个队列,本例是将消息发往队列pikamq
                  body='Test Message') # 消息内容
connection.close() #当生产者发送完消息后,可选择关闭连接

生产者

import pika
import random
  
credentials = pika.PlainCredentials('guest', 'geust')
#这里可以连接远程IP,请记得打开远程端口  
parameters = pika.ConnectionParameters('localhost',5672,'/',credentials)  
connection = pika.BlockingConnection(parameters)  
channel = connection.channel()  
  
#channel.queue_declare(queue='hello')  
number = random.randint(1,1000)
body = 'hello world:%s' %number
channel.basic_publish(exchange='',  
                      routing_key='hello',  
                      body=body)  
print " [x] Sent %s" %body  
connection.close()  

消费者

import pika  
  
credentials = pika.PlainCredentials('guest', 'nova')  
parameters = pika.ConnectionParameters('localhost',5672,'/',credentials    )  
connection = pika.BlockingConnection(parameters)  
channel = connection.channel()  
  
channel.queue_declare(queue='hello')  
  
print ' [*] Waiting for messages. To exit press CTRL+C'  
  
def callback(ch, method, properties, body):  
    print " [x] Received %r" % (body,)  
  
channel.basic_consume(callback,  
                      queue='hello',  
                      no_ack=True)  
  
channel.start_consuming()  

https://www.cnblogs.com/kerwinC/p/5967584.html

生产者

import pika
connection = pika.BlockingConnection(
pika.ConnectionParameters('localhost'))#建立一个最基本的socket
chanel = connection.channel()#声明一个管道

chanel.queue_declare(queue='name')#给管道创建一个队列,参数是管道队列名。

chanel.basic_publish(exchange='',
                 routing_key='name',
                 body ='HELLO WORD!')#要发送的消息。
print( '发出一个消息')
connection.close()#关闭

消费者

import pika,time

consumer = pika.BlockingConnection\
(pika.ConnectionParameters('localhost'))#创建socket连接
channel = consumer.channel()#创建管道
channel.queue_declare(queue='name')

def backcall(ch,method,properties,body):#参数body是发送过来的消息。
    print(ch,method,properties)
    time.sleep(15)
    print('[x] Received %r'%body)

channel.basic_consume(backcall,#回调函数。执行结束后立即执行另外一个函数返回给发送端是否执行完毕。
                  queue='name',
                  no_ack=True#不会告知服务端我是否收到消息。一般注释。
                   )#如果注释掉,对方没有收到消息的话不会将消息丢失,始终在队列里等待下次发送。

print('waiting for message To exit   press CTRL+C')
channel.start_consuming()#启动后进入死循环。一直等待消息。

相关文章

  • Pika使用入门

    python RabbitMQ队列使用 关于python的queue介绍 关于python的队列,内置的有两种,一...

  • pika支持codis的slot迁移

    概述 pika使用redis协议,命令操作和redis一致,因而可以直接使用codis作为pika的集群解决方案,...

  • Python3 操作RabbitMQ

    python使用pika模块操作RabbitMQ,我们可以通过sudo pip3 install pika来安装p...

  • PIKA PIKA PIKA PIKA

    大家好,我是菜鸟小白菌。 今天给大家推荐的电影是大侦探皮卡丘。PIKA-PIKA, PIKA PIKA PIKAP...

  • Old News

    一、技术类 1、一篇看懂 React Hooks 2、IndexedDB 入门 3、@pika/web 4、Flu...

  • pika 链接问题

    使用celery结合pika处理异步任务,并将处理任务结果发布到其他队列中时遇到错误获取pika 链接 过一段时间...

  • pika中锁的应用

    参考代码:pika-2.4.0pika作为类redis的存储系统,为了弥补在性能上的不足,在整个系统中大量使用多线...

  • RabbitMQ pika简单使用

    MQ 全称为 Message Queue, 是一种应用程序对应用程序的通信方法。MQ 是消费-生产者模型的一个典型...

  • pika_to_redis数据迁移工具设计与实现过程

    背景 为满足运维人员对于pika可以更好地运维,需要方便地将数据从pika迁移到redis,在pika系统中之前已...

  • pika 远程连接rabbitmq使用

    P为生产者, 红色为队列 C为消费者 拷贝配置文件到 /etc/rabbitmq/ zcat /usr/share...

网友评论

    本文标题:Pika使用入门

    本文链接:https://www.haomeiwen.com/subject/zwawwftx.html