路由键模糊匹配

使用正则表达式进行匹配。其中“#”表示所有、全部的意思;“*”只匹配到一个词。

匹配规则:

路由键:routings = [ 'happy.work',  'happy.life' , 'happy.work.teacher',  'sad.work',  'sad.life', 'sad.work.teacher' ]

"#":匹配所有的路由键

"happy.#":匹配  'happy.work',  'happy.life' , 'happy.work.teacher'

"work.#":无匹配

“happy.*”:匹配 'happy.work',  'happy.life'

"*.work":匹配 'happy.work',  'sad.work'

"*.work.#":匹配  'happy.work',  'happy.work.teacher',  'sad.work', 'sad.work.teacher'

示例代码:

send4.py:

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import pika
  4.  
  5. hostname = '192.168.1.133'
  6. parameters = pika.ConnectionParameters(hostname)
  7. connection = pika.BlockingConnection(parameters)
  8.  
  9. # 创建通道
  10. channel = connection.channel()
  11. # 定义交换机,设置类型为topic
  12. channel.exchange_declare(exchange='change_top', type='topic')
  13.  
  14. # 定义路由键
  15. routings = ['happy.work', 'happy.life', 'sad.work', 'sad.life']
  16.  
  17. # 将消息依次发送到交换机,并设定路由键
  18. for routing in routings:
  19. message = '%s message.' % routing
  20. channel.basic_publish(exchange='change_top', routing_key=routing, body=message)
  21. print message
  22.  
  23. connection.close()

receive4.py:

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import pika
  4. import sys
  5.  
  6. hostname = '192.168.1.133'
  7. parameters = pika.ConnectionParameters(hostname)
  8. connection = pika.BlockingConnection(parameters)
  9.  
  10. # 创建通道
  11. channel = connection.channel()
  12. # 定义交换机,设置类型为topic
  13. channel.exchange_declare(exchange='change_top', type='topic')
  14.  
  15. # 从命令行获取路由参数,如果没有,则报错退出
  16. routings = sys.argv[1:]
  17. if not routings:
  18. print >> sys.stderr, "Usage: %s [routing_key]..." % (sys.argv[0],)
  19. exit()
  20.  
  21. # 生成临时队列,并绑定到交换机上,设置路由键
  22. result = channel.queue_declare(exclusive=True)
  23. queue_name = result.method.queue
  24. for routing in routings:
  25. channel.queue_bind(exchange='change_top', queue=queue_name, routing_key=routing)
  26.  
  27. def callback(ch, method, properties, body):
  28. print " [x] Received %r" % (body,)
  29.  
  30. channel.basic_consume(callback, queue=queue_name, no_ack=True)
  31.  
  32. print ' [*] Waiting for messages. To exit press CTRL+C'
  33. channel.start_consuming()

打开四个终端,运行一下命令:

发送端:

接收端:

                        

python中RabbitMQ的使用(路由键模糊匹配)的更多相关文章

  1. python中RabbitMQ的使用(路由键)

    1.简介 当我们希望每个接收端接收各自希望的消息时,我们可以使用路由键,此时交换机的类型为direct. 2.工作原理 每个接收端的消息队列在绑定交换机的时候,可以设定相应的路由键. 发送端通过交换机 ...

  2. python中RabbitMQ的使用(安装和简单教程)

    1,简介 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现的产品,RabbitMQ是一个消息代理,从"生产者"接收消息 ...

  3. SpringCloud Stream生产者配置RabbitMq的动态路由键

    在写这个文章前不得不吐槽目前国内一些blog的文章,尽是些复制粘贴的文章,提到点上但没任何的深入和例子.......... 经过测试下来总结一下RabbitMQ的Exchange的特性: 1.dire ...

  4. python中RabbitMQ的使用(远程过程调用RPC)

    在RabbitMQ消息队列中,往往接收者.发送者不止是一个身份.例如接接收者收到消息并且需要返回给发送者. 此时接收者.发送者的身份不再固定! 我们来模拟该情形: 假设有客户端client,服务端se ...

  5. python中RabbitMQ的使用(工作队列)

    消息可以理解为任务,消息发送者可以看成任务派送者(sender),消息接收者可以看成工作者(worker). 当工作者接收到一个任务,还没完任务时分配者又发一个任务,此时需要多个工作者来共同处理这些任 ...

  6. python中RabbitMQ的使用(交换机,广播形式)

    简介 如果要让每个接收端都能收到消息,此时需要将消息广播出去,需要使用交换机. 工作原理 消息发送端先将消息发送给交换机,交换机再将消息发送到绑定的消息队列,而后每个接收端都能从各自的消息队列里接收到 ...

  7. 使用python处理selenium中的xpath定位元素的模糊匹配问题

    # 用contains,寻找页面中style属性值包含有sp.gif这个关键字的所有div元素,其中@后面可以跟该元素任意的属性名. self.driver.find_element_by_xpath ...

  8. python中检测mysql的主键唯一性异常

    有两种方法: 1.直接检测是什么异常(查mysql文档找出异常代码) import os import mysql_operate.mysql_connect as mysql import re d ...

  9. 使用python处理selenium中的css_selector定位元素的模糊匹配问题

    # 匹配id,先指定一个html标签,然后加上“#”符号,再加上id的属性值 self.driver.find_element_by_css_selector('div#ID').click() # ...

随机推荐

  1. Python多线程爬虫

    前言 用上多线程,感觉爬虫跑起来带着风 运行情况 爬取了9万多条文本记录,耗时比较短,一会儿就是几千条 关键点 多个线程对同一全局变量进行修改要加锁 # 获取锁,用于线程同步 threadLock.a ...

  2. jquery.form.js实现将form提交转为ajax方式提交的方法

    本文实例讲述了jquery.form.js实现将form提交转为ajax方式提交的方法.分享给大家供大家参考.具体分析如下: 这个框架集合form提交.验证.上传的功能. 这个框架必须和jquery完 ...

  3. DOM中的outerHTML,innerHTML,outerText,innerText的区别

    --转自http://blog.163.com/yw_0721/blog/static/7164579720102932157759/ 简单的说innerHTML和outerHTML.innerTex ...

  4. 【搬运工】——Java中的static关键字解析(转)

    原文链接:http://www.cnblogs.com/dolphin0520/p/3799052.html static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大 ...

  5. Unicode转字符串

    /// <summary> /// Unicode转字符串 /// </summary> /// <returns>The to string.</retur ...

  6. 每日质量NPM包拖拽文件上传_react-dropzone

    一.react-dropzone 官方定义: Simple HTML5-compliant drag'n'drop zone for files built with React.js. 理解: 一个 ...

  7. 蚂蚁金服首席数据科学家漆远:AI技术开放,与业界融合共创

    小蚂蚁说: 11月8日,在第五届世界互联网大会-<人工智能:融合发展新机遇>论坛上,蚂蚁金服副总裁.首席数据科学家漆远认为AI具有控制风险.降本增效和提升用户体验三大作用. 11月8日,第 ...

  8. Jmeter 老司机带你一小时学会Jmeter

    Jmeter的安装   官网下载地址:http://jmeter.apache.org/download_jmeter.cgi 作为Java应用,是需要JDK环境的,因此需要下载安装JAVA,并且作必 ...

  9. MVC数据列表展示【三】

    一.控制器向视图传递参数的两种形式:使用到的技术有EF,linq表达式,StringBuilder,相关技术都可以在我的博客园中找到详细的技术介绍. 1. 第一种是通过字符通过foreach循环拼接将 ...

  10. zlib交叉编译

    下载 zlib-1.2.9.tar.gz wget http://www.zlib.net/fossils/zlib-1.2.9.tar.gz 解压文件 tar -zxvf zlib-1.2.9.ta ...