rabbitMQ文档代码样例
来源:互联网 发布:软件界面错位 编辑:程序博客网 时间:2024/05/17 23:17
概念:
channel:通道,amqp支持一个tcp连接上启用多个mq通信通道,每个通道都可以被作为通信流。
producer:生产者,是消息产生的源头。
exchange:交换机,可以理解为具有路由表的路由规则。
queues:队列,装载消息的缓存容器。
consumer:消费者,连接到队列并取走消息的客户端。
核心思想:在RabbitMQ中,生产者从不直接将消息发送给队列。
事实上,有些生产者甚至不知道消息是否被送到某个队列中去了。生产者只负责将消息送给交换机,而交换机确切地知道什么消息应该送到哪。
bind:绑定,实际上可以理解为交换机的路由规则。每个消息都有一个称为路由键的属性(routing key),就是一个简单的字符串。一个绑定将【交换机,路由键,消息送达队列】三者绑定在一起,形成一条路由规则。
exchange type:交换机类型:
fanout:不处理路由键,转发到所有绑定的队列上
direct:处理路由键,必须完全匹配,即路由键字符串相同才会转发
topic:路由键模式匹配,此时队列需要绑定要一个模式上。符号“#”匹配一个或多个词,符号“*”匹配不多不少一个词。因此“audit.#”能够匹配到“audit.irs.corporate”,但是“audit.*” 只会匹配到“audit.irs”
1.Hello World测试代码
send.py代码:
#!/usr/bin/env pythonimport pika#pika.ConnectionParameters类继承自Parameters,初始化连接参数,默认用户名密码为guest/guestconnection = pika.BlockingConnection(pika.ConnectionParameters( host='localhost'))channel = connection.channel()channel.queue_declare(queue='hello')channel.basic_publish(exchange='', routing_key='hello', body='Hello World!')print " [x] Sent 'Hello World!'"connection.close()
receive.py代码:
#!/usr/bin/env pythonimport pikaconnection = pika.BlockingConnection(pika.ConnectionParameters( host='localhost'))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()
2.Work Queues
远程RPC调用
rpc_server.py代码:
#!/usr/bin/env pythonimport pikaconnection = pika.BlockingConnection(pika.ConnectionParameters( host='localhost'))channel = connection.channel()channel.queue_declare(queue='rpc_queue')def fib(n): if n == 0: return 0 elif n == 1: return 1 else: return fib(n-1) + fib(n-2)def on_request(ch, method, props, body): n = int(body) print " [.] fib(%s)" % (n,) response = fib(n) ch.basic_publish(exchange='', routing_key=props.reply_to, properties=pika.BasicProperties(correlation_id = \ props.correlation_id), body=str(response)) ch.basic_ack(delivery_tag = method.delivery_tag)channel.basic_qos(prefetch_count=1)channel.basic_consume(on_request, queue='rpc_queue')print " [x] Awaiting RPC requests"channel.start_consuming()
rpc_client.py代码:
#!/usr/bin/env pythonimport pikaimport uuidclass FibonacciRpcClient(object): def __init__(self): self.connection = pika.BlockingConnection(pika.ConnectionParameters( host='localhost')) self.channel = self.connection.channel() result = self.channel.queue_declare(exclusive=True) self.callback_queue = result.method.queue self.channel.basic_consume(self.on_response, no_ack=True, queue=self.callback_queue) def on_response(self, ch, method, props, body): if self.corr_id == props.correlation_id: self.response = body def call(self, n): self.response = None self.corr_id = str(uuid.uuid4()) self.channel.basic_publish(exchange='', routing_key='rpc_queue', properties=pika.BasicProperties( reply_to = self.callback_queue, correlation_id = self.corr_id, ), body=str(n)) while self.response is None: self.connection.process_data_events() return int(self.response)#创建FibonacciRpcClient的实例fibonacci_rpcfibonacci_rpc = FibonacciRpcClient()print " [x] Requesting fib(30)"response = fibonacci_rpc.call(30)print " [.] Got %r" % (response,)
0 0
- rabbitMQ文档代码样例
- RabbitMQ 官方说明文档
- rabbitMQ说明文档地址
- Rabbitmq安装文档
- Rabbitmq应用文档
- rabbitmq PHP代码示例
- rabbitmq测试代码
- RabbitMQ系列—RabbitMQ 代码演示
- rabbitmq---代码例子详解---perfect
- Rabbitmq 概述及代码示例
- RabbitMQ消息队列测试代码
- RabbitMQ(一) 入门代码 Helloworld
- rabbitmq 手动ack 代码配置
- rabbitmq-c++(SimpleAmqpClient) 笔记代码
- spring整合rabbitMQ代码实例
- spring整合rabbitMQ代码实例
- RabbitMQ官方文档使用指南阅读笔记
- MQ选型对比文档 综合选择RabbitMq
- 提高工作效率的十条好习惯
- XMPP 学习!
- 黑马程序员------入学资格------方法的设置及调用
- const资料整理
- 统计推断week4
- rabbitMQ文档代码样例
- //比较实用的一段代码,单击鼠标并在单击位置创建物体的功能
- struts2和freemarker集成实例
- MTK6592平台 touchpanel驱动设备加载(三)
- 执行事务
- struts1源码学习1
- 关于C,看过的一些书
- Java appendReplacement的理解
- Comment on "Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman"