上一篇博客我们没有介绍完rabbitmq,今天我们接着上一篇的博客继续介绍rabbitmq

这边的博客的内容如下

1、组播,对指定的队列设置关键词,通过关键词来控制消息的分发

2、更加细致的组播

先来介绍组播

其实组播和广播只有3个区别

a、组播的exchange的类型是“direct”

b、组播的生产端不需要绑定queue,只需要申明exchange,然后在发布消息的时指定route_key、exchange、message即可

c、消费者者需要绑定队列到exchange上,且也需要指定route_key,只有绑定到和生产者端相同的exchange的队列【队列名称可以不一样】,且生产端的route_key一致就可以收到消息

先看生产端的核心代码

import pika

test_connectio = pika.BlockingConnection(pika.ConnectionParameters(host="localhost"))

test_channel = test_connectio.channel()

test_channel.exchange_declare(exchange="logs",
exchange_type="direct") #在队列中什么一个exchange,类型为“direct” test_channel.queue_declare(queue="zhang1",durable=True)
test_channel.queue_declare(queue="zhang2",durable=True)
test_channel.queue_declare(queue="zhang3",durable=True) test_channel.basic_publish(exchange="logs",
routing_key="error",
body="this is 组播") #发布消息,将消息发往exchange名称为“logs”中,且指定的routing_key为error的队列中 test_channel.close()

 

在看消费者的核心代码

import pika

test_connection = pika.BlockingConnection(pika.ConnectionParameters(host="localhost"))

test_channel = test_connection.channel()

test_channel.exchange_declare(exchange="logs",
exchange_type="direct") #在管道中申明一个exhcange test_channel.queue_declare(queue="zhang2",durable=True)
#在管道中申明一个队列 test_channel.queue_bind(exchange="logs",
queue="zhang2",
routing_key="info")
#将队列绑定到exchange上,并指明我这个消费者的routing_key,只有和生产端相同
#routing_key的消费者才可以收到生产者的消息,这里可以绑定多个routing_key def callback(ch,method,properties,body):
print("server:",body) test_channel.basic_consume(callback,
queue="zhang2",
no_ack=True) test_channel.start_consuming()

 

二、这里我们看下更细致的消息控制

更细致的消息控制是什么意思呢?比如我们实现这样一个场景;消费者可以接受*.error的日志,还可以接受apache.info的日志

更细致的消息控制和组播有2个不同

1、更细致的消息控制用到的exchange的类型为topic

2、routing_key的用法用法不一样

下面我们看下生产者的核心代码

 import pika
import sys test_connection = pika.BlockingConnection(pika.ConnectionParameters(host="localhost")) test_channel = test_connection.channel() test_channel.exchange_declare(exchange="topic_logs",
exchange_type="topic") route_key = sys.argv[1] if len(sys.argv) > 1 else "anonymous.info" message = "".join(sys.argv[2:]) or "hello world" test_channel.basic_publish(exchange="topic_logs",
routing_key=route_key,
body=message) print("[x] send %r %r" %(route_key,message)) test_connection.close()

  

在看消费者的核心代码

import pika
import sys
test_connection = pika.BlockingConnection(pika.ConnectionParameters(host="localhost")) test_channel = test_connection.channel() test_channel.exchange_declare(exchange="topic_logs",
exchange_type="topic") result = test_channel.queue_declare(exclusive=True) queue_name = result.method.queue
binding_keys = sys.argv[1:] if not binding_keys:
sys.stderr.write("Usage: %s [binding_key]....\n" %sys.argv[0])
sys.exit(0) for binding_key in binding_keys:
test_channel.queue_bind(exchange="topic_logs",
queue=queue_name,
routing_key=binding_key) print("waiting for message") def callback(ch,method,properties,body):
print("[x] %s" %(body)) test_channel.basic_consume(callback,
queue=queue_name,
no_ack=True) test_channel.start_consuming()

我们可以做如下测试

在生产者端执行下面的命令,将消息发往mysql.error,消息的内容是xxxxxxxx

python rabbitmq_send.py mysql.error xxxxxxxxx

在消费者端执行下面的命令,该消费者接受所有的*.info的消息,和mysql.info的消息

python rabbitmq_receive.py *.info mysql.error

  

rabbitmq的简单介绍二的更多相关文章

  1. rabbitmq的简单介绍一

    该博客的主要讲解了以下几种rabbitmq的用法1.实现简单的生产者发送消息给消费者2.实现序列持久化3.实现消息持久化4.实现消息公平分发5.实现广播6.实现组播7.实现细分组播 先来看下rabbi ...

  2. angular1.x的简单介绍(二)

    首先还是要强调一下DI,DI(Denpendency Injection)伸手获得,主要解决模块间的耦合关系.那么模块是又什么组成的呢?在我看来,模块的最小单位是类,多个类的组合就是模块.关于在根模块 ...

  3. Linux 下UVC&V4L2技术简单介绍(二)

    通过前文Linux 下UVC&V4L2技术简单介绍(一)我们了解了UVC和V4L2的简单知识. 这里是USB设备的文档描写叙述:http://www.usb.org/developers/do ...

  4. 一、Rabbitmq的简单介绍

    以下只是本人从零学习过程的整理 部分内容参考地址:https://www.cnblogs.com/ysocean/p/9240877.html 1.RabbitMQ的概念 RabbitMQ是实现了高级 ...

  5. 一、tars简单介绍 二、tars 安装部署资料准备

    1.github地址https://github.com/Tencent/Tars/ 2.tars是RPC开发框架,目前支持c++,java,nodejs,php 3.tars 在腾讯内部已经使用了快 ...

  6. RabbitMQ的基础介绍

    转自:http://blog.csdn.net/whycold/article/details/41119807 一.引言 你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构 ...

  7. 关于RabbitMQ的简单理解

    说明:想要理解RabbitMQ,需要先理解MQ是什么?能做什么?然后根据基础知识去理解RabbitMQ是什么.提供了什么功能. 一.MQ的简单理解 1. 什么是MQ? 消息队列(Message Que ...

  8. 利用Python进行数据分析(4) NumPy基础: ndarray简单介绍

    一.NumPy 是什么 NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生.在之前的随笔里已有更加详细的介绍,这里不再赘述. 利用 Python 进行数据分析(一)简单介绍 ...

  9. Android 驱动(二) IIC简单介绍

    一. I2C简单介绍 I2C(Inter-Integrated Circuit)总线是一种由 Philips 公司开发的两线式串行总线,用于连接微控制器及其外围设备.I2C 总线最基本的长处就是简单性 ...

随机推荐

  1. 使用C++实现二叉搜索树的数据结构

    需要注意的地方: ①二叉搜索树删除一个指定结点R,若R为叶子结点,则将R的父结点中指向R的指针改为指向nullptr:若R的左右子结点一个为空,一个非空,则将R的父结点中指向R的指针改为指向R的非空子 ...

  2. OpenCV 3.2.0 + opencv_contrib+VS2017

    首先本文假定你的电脑已经配置好了OpenCV3.2.0,并且想要在此基础上,添加opencv_contrib.在学习图像识别中的特征点检测和匹配时,需要用到一些常用的算法如FREAK.Surf和Sif ...

  3. UE4 游戏中csv配置文件使用

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接: http://blog.csdn.net/cartzhang/article/details/76549463 作者:ca ...

  4. imshow(K)和imshow(K,[]) 的区别

    参考文献 imshow(K)直接显示K:imshow(K,[])显示K,并将K的最大值和最小值分别作为纯白(255)和纯黑(0),中间的K值映射为0到255之间的标准灰度值.

  5. 制作一个64M的U盘启动盘(mini linux + winpe +dos toolbox)

    制作一个64M的U盘启动盘(mini linux + winpe +dos toolbox) 自己动手定制winpe+各类dos工具箱U盘启动盘+minilinux 由于一个64M老U盘,没什么用,拿 ...

  6. 记录一次MyEclipse工程搭建的辛酸

    一个历史项目,使用的是Myeclipse6.5版本:这一天就砸在这个项目了. 调通web项目:内置的是tomcat插件,貌似和eclipse的server版的还不太一样. 长这个样子:

  7. jquery 绘图工具 flot 学习笔记

    今天想做一个统计图表,像163博客的流量统计一样的,借助 flot 实现了,而且很简单. flot网址:http://code.google.com/p/flot/ 下载 JS 文件,使用方法和 jq ...

  8. Java通过匿名类来实现回调函数

    在C语言中,函数名可以当做函数指针传递给形参从而实现回调 void f1() { printf("f1()\n"); } void f2() { printf("f2() ...

  9. java中的变量和常量

    也可以先声明后赋值  自动类型转换 1.  目标类型能与源类型兼容,如 double 型兼容 int 型,但是 char 型不能兼容 int 型 2.  目标类型大于源类型,如 double 类型长度 ...

  10. 2017CCSP总结——失败(铜)

    这次比赛,算是铩羽而归.尽管是第一次出去打比赛,在经验方面略显不足,但是,归根到底,我这次比赛打的很失败.包括我们学校去的,打的也不好,可以说是全体翻车.真的很对不起带我们去的老师.>_< ...