在上一章中,所有的接收端获取的所有的消息。这一章,我们将讨论,一些消息,仍然发送给所有接收端。其中,某个接收端,只对其中某些消息感兴趣,它只想接收这一部分消息。如下图:C1,只对error感兴趣,C2对其他三种甚至对所有都感兴趣,我们该怎么搞呢?

发送端:

import pika
import sys

connection = pika.BlockingConnection(pika.ConnectionParameters(
host='localhost'))
channel = connection.channel()

# 创建一个交换机:direct_logs 类型是:direct
channel.exchange_declare(exchange='direct_logs', exchange_type='direct')

severity = sys.argv[1] if len(sys.argv) > 1 else 'info'
message = ' '.join(sys.argv[2:]) or 'Hello World!'

# 向exchage按照设置的 routing_key=severity 发送message
channel.basic_publish(exchange='direct_logs',
routing_key=severity,
body=message)

print(" [x] Sent %r:%r" % (severity, message))
connection.close()

接收端:

import pika
import sys

connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()

# 跟发送端一致
channel.exchange_declare(exchange='direct_logs',
exchange_type='direct')

# 还是声明临时队列
result = channel.queue_declare(exclusive=True)
queue_name = result.method.queue

severities = sys.argv[1:]
if not severities:
sys.stderr.write("Usage: %s [info] [warning] [error]\n" % sys.argv[0])
sys.exit(1)

# 使用routing_key绑定交换机和队列。广播类型,无需使用这个
# direct类型:会对消息进行精确匹配
# 对个队列使用相同路由key是可以的
for severity in severities:
channel.queue_bind(exchange='direct_logs',
queue=queue_name,
routing_key=severity)

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

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

channel.basic_consume(callback,
queue=queue_name,
no_ack=True)

channel.start_consuming()

效果图:

注意:

基于这种模式和上一章,在发送端发消息之前,需要先将接收端启动起来。为啥,前面说了,过期消息不感兴趣,是不会接收的。

在做实验的时候,需要注意

最新文章

  1. JavaScript - 正则表达式
  2. sublime text3点击ctrl+B无法运行Python程序?
  3. Error 403--Forbidden
  4. c# 进程间的通信实现之一简单字符串收发
  5. 【转】Unity 解析Json字符串
  6. xubuntu install nodejs
  7. IE下JS接受ActiveX控件方法
  8. org.springframework.web.servlet.view
  9. java 内存 垃圾回收调优
  10. HDU 4121 Xiangqi (算是模拟吧)
  11. Golang基于学习总结
  12. tabBarItem动画
  13. PE文件详解二
  14. PS笔刷的使用
  15. JEECG 集成KiSSO单点登录实现统一身份认证
  16. ES5和ES6那些你必须知道的事儿(二)
  17. 关于在VB.NET中调用使用VC++编写的类库dll的一点笔记
  18. 机器学习技术点----apachecn的github地址
  19. msf客户端渗透(八):持久后门,mimikatz使用,获取PHP服务器shell
  20. win7 C环境搭建

热门文章

  1. ret.data[0]._highlight = true iview table表格高亮
  2. express第三方中间件研究之bodyParser中间件
  3. nodejs中的并发编程
  4. [C++]那些年被虐的STL
  5. json到底是什么??????
  6. Swift 4.0 中的错误处理及抛出错误
  7. 手动实现AJAX
  8. [Linux系统] CentOS7(RHEL7)重置root用户密码
  9. 《JavaScript 模式》读书笔记(5)— 对象创建模式2
  10. JavaScript模块化-CommonJS、AMD、CMD、UMD、ES6