RabbitMQ 的深入理解

RabbitMQ 是一个实现了AMQP协议的标准的开元消息代理和队列服务器,它是企业级的消息系统,自带了集群,管理,插件系统等特性,在
高可用性,可扩展性,易用性做的很好
RabbitMQ 的几个概念:
1,消息包含有效载荷(也就是要传输的数据,可以使纯文本,也可以是json),标签(RabbitMQ使用它决定了发给哪个消费者)
2,发布者,也就是生产者,它创建了消息,并且设置标签
3,消费者,连接到代理服务器之上,接受消息的有效载荷(不需要标签)
RabbitMQ 是通过交换机来确定什么样的消费者的;
1,直连交换机(一对一),将一个队列绑定一个交换机的同时,赋予一个路由键,交换机会把它路由给绑定值同样为这个值的队列之中
2,主题交换机(一对多),用来实现消息的多播路由。由'.'来进行分割的词语,这些词语必须是相对应的业务相关联
3,扇形交换机(广播的形式),将消息路由绑定到所有的路由之中.
import sys
import pika

#使用了默认的虚拟主机与密码
parameters = pika.URLParameters('amqp://guest:guest@localhost:5672//')
#connection 指的是消息代理
connection = pika.BlockingConnection(parameters)
#获取信道,所有的发布消息,接收消息,订阅消息都是通过信道来完成的,相当于'电缆'(里面包裹着消息),一个tcp可以创建多个信道
channel =connection.channel()
#durable=True 表示 RabbitMQ 崩溃时重新建立队列与交换机
#创建交换机 web_develop 制定交换类型为直接交换
channel.exchange_declare(exchange='web_develop',exchange_type='direct',
                         passive=False,durable=True,auto_delete=False)

# sys.argv[ ]其实就是一个列表,里边的项为用户输入的参数
# argv[0] 指的是 此模块在项目之中的路径
# print sys.argv[1] 指的是 第一个运行参数  python test.py manager  打印结果为 manager
# print sys.argv[2] 指的是 第二个运行参数  python test.py manager abc  打印结果为 abc
if len(sys.argv)!=1:
    mas=sys.argv[1]
else:
    mas = 'haha'
#delivery_mode = 2 表示永久储存,重启 RabbitMQ 也不会丢失
props =pika.BasicProperties(content_type='text/plain',delivery_mode=2)

channel.basic_publish('web_develop','xxx_routing_kay',mas,properties=props)
connection.close()

消费者代码

import pika

# method_frame 表示标记信息 body是消息体
def on_massage(channel,method_frame,header_frame,body):
    channel.basic_ack(delivery_tag=method_frame.delivery_tag)
    print(body)

parameters = pika.URLParameters('amqp://guest:guest@localhost:5672//')
#connection 指的是消息代理
connection = pika.BlockingConnection(parameters)
#获取信道
channel =connection.channel()
#针对于直连交换机指定直连的队列
channel.exchange_declare(exchange='web_develop',exchange_type='direct',
                         passive=False,durable=True,auto_delete=False)

#声明队列,如果没有就创建,从队列之中取出数据
channel.queue_declare(queue='standard',auto_delete=True)
#通过路由键将路由与队列绑定
channel.queue_bind(queue='standard',exchange='web_develop',routing_key='xxx_routing_kay')
#指定回调函数,与队列
channel.basic_consume(on_massage,'standard')

try:
    #开始消费
    channel.basic_consuming()
except KeyboardInterrupt:
    #停止消费
    channel.stop_consuming()

connection.close()

 

转载于:https://www.cnblogs.com/shi-qi/articles/9478653.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值