Rabbitmq-topic演示
在direct演示里,我们的日志系统实现了可选择性的接收日志。但仍旧有一些限制:不能基于多种标准进路由。在一个完整的日志系统中,我们可能不仅要根据日志的严重级别来接收日志,可能需要基于日志的来源来进行路由。
什么叫日志的来源呢?
就是引发日志的设备。比如设备auth/cron/kern。我们可以监听来自corn的错误日志,同时也监听kern的所有日志。这使得我们记录日志更加灵活。
通过topic类型的交换机,我们来演示如何实现这一功能。对于topic交换机的消息的路由键routing key不能任意给定。它必须是一些单词的集合,中间用点号.分割。这些单词可以任意,但通常要体现出消息的特征。一些有效的路由键示例:stock.usd.nyse,nyse.vmw,quick.orange.rabbit。这些路由键可以包含很多单词,但路由键总长度不能超过255个字节。
Topic exchange
非常强大,可以实现其他任意路由器的功能。当一个队列以绑定键
#
绑定,它将会接收到所有的消息,而无视路由键(实际是绑定键#
匹配了任意的路由键)。----这和fanout
路由器一样了。当
*
和#
这两个特殊的字符不出现在绑定键中,Topic exchange
就会和direct exchange
类似了。<facility>.<severity>
为路由键。消费者:ReceiveLogsTopic
测试参数:日志严重级别info/warn/crit...
和设备auth/cron/kern...
测试步骤:
消费者:
将String bingingKeys[] = {""}
改为String bingingKeys[] = {"#"}
,启动第一个消费者;
再改为String bingingKeys[] = {"kern.*"}
,启动第二个消费者;
再改为String bingingKeys[] = {"*.critical"}
,启动第三个消费者;
再改为String bingingKeys[] = {"kern.*", "*.critical"}
,启动第四个消费者。
生产者,发送多个消息,如:
路由键为kern.critical
的消息:A critical kernel error
;
路由键为kern.info
的消息:A kernel info
;
路由键为kern.warn
的消息:A kernel warning
;
路由键为auth.critical
的消息:A critical auth error
;
路由键为cron.warn
的消息:A cron waning
;
路由键为cron.critical
的消息:A critical cron error
;
试试最后的结果:第一个消费者将会接收到所有的消息,第二个消费者将会kern
的所有严重级别的日志,第三个消费者将会接收到所有设备的critical
消息,第四个消费者将会接收到kern
设备的所有消息和所有critical
消息。
Rabbitmq-topic演示的更多相关文章
- 初识RabbitMQ,附RabbitMQ+PHP演示实例
RabbitMQ是一个在AMQP基础上实现的企业级消息系统.何谓消息系统,就是消息队列系统,消息队列是""消费-生产者模型""的一个典型的代表,一端往消息队列中 ...
- rabbitmq+topic+java
可参照github代码:https://github.com/rabbitmq/rabbitmq-tutorials/blob/master/java/EmitLogTopic.java 1. 新建m ...
- demo rabbitmq topic(主题模式),fanout(广播模式),轮询分发,确认接收Ack处理
//durable = true 代表持久化 交换机和队列都要为true ,持久代表服务重启,没有处理的消息依然存在 //topic 根据不同的routkey 发送和接收信息 //fanout 广播模 ...
- 9.RabbitMQ Topic类型交换机
RabbitMQ消息服务中Topic类型交换机根据通配符路由消息,*代表一个单词,#代表代表0或多个单词. 生产者 消费者 代码 Producer.java package com.tes ...
- RabbitMQ Topic exchange
Topic exchange topic与之前的每个类型都不同(ps:废话每个都是不同的).Topic解决了我们另一个需求.举个例子,有一个做资讯的公司,他们会收集各种科技公司的动态并且第一时间转发出 ...
- RabbitMQ topic 交换器
topic交换器:"."将路由键分为几个标识符,"*"匹配一个, "#"可以匹配多个 1:路由键为*或者#的时候 *:只能匹配单个的字符串 ...
- 学习ActiveMQ(三):发布/订阅模式(topic)演示
1.在这个项目中新增两个java类,主题生产者和主题消费者: 2.和点对点的代码差别并不大,所以将消费者和生产者的分别代码拷入新增的java类中,再修改就好了. appProducerTopic代码: ...
- Java使用RabbitMQ之订阅分发(Topic)
使用RabbitMQ进行消息发布和订阅,生产者将消息发送给转发器(exchange),转发器根据路由键匹配已绑定的消息队列并转发消息,主题模式支持路由键的通配. 生产者代码: package org. ...
- RabbitMQ简单应用の主题模式(topic)
Topic exchange(主题转发器) 发送给主题转发器的消息不能是任意设置的选择键,必须是用小数点隔开的一系列的标识符.这些标识符可以是随意,但是通常跟消息的某些特性相关联.一些合法的路由选择键 ...
- RabbitMQ入门_07_Fanout 与 Topic
A. 用广播的方式实现发布订阅 参考资料:https://www.rabbitmq.com/tutorials/tutorial-three-java.html Fanout 类型的 Exchange ...
随机推荐
- 【详细】【转】CentOS 7部署ASP.NET Core应用程序
很早就看过关于net core部署在Linux上的文章,自己也曾亲自将项目部署在Linux上,今天看到这篇文章,为其格式之工整而转! 1.环境准备 网上看了一下,Linux云服务器还挺贵的,那就只好先 ...
- Python鸢尾花分类实现
#coding:utf-8 from sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_s ...
- 在ASP.NET Core中使用多环境
原文地址:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments?view=aspnetcore-2.1#star ...
- Android (checkBox)
1.使用 setOnCheckedChangeListener()方法对checkBox进行事件监听 2.重写方法 public void onCheckedChanged(CompoundButto ...
- Python基础知识:函数
1.定义函数和调用函数 #定义函数def def greet_user(username): '''简单的问候语''' print('Hello,%s!'%username) greet_user(' ...
- log4.net 配置-控制台输出带颜色的日志
一般对控制台输入的日志我们使用的 Appender 为 ConsoleAppender ,日志为白色文字. 当我们想到 DEBUG,INFO,WARN,ERROR 每种日志设置一种颜色时我们需要将 ...
- debian 7.4 安装配置
改用debian差不多有半年了,之前一直用fedora,大概3年多,虽然软件包都很新,总是不太稳定,有点软件用着用着就自动退出了. 换了debain之后,这半年还真是一直没啥问题,这里总结了一些安装配 ...
- Java7/8 中 HashMap 和 ConcurrentHashMap的对比和分析
大家可能平时用HashMap比较多,相对于ConcurrentHashMap 来说并不是很熟悉.ConcurrentHashMap 是 JDK 1.5 添加的新集合,用来保证线程安全性,提升 Map ...
- PyQt5--TextDrag
# -*- coding:utf-8 -*- ''' Created on Sep 21, 2018 @author: SaShuangYiBing Comment: ''' import sys f ...
- Sketch网页截屏插件设计开发
1.需求 在Sketch的Artboard中插入网页截图: 1.1.输入网址,自动截图到Artboard中,并居中显示: 1.2.可截取网页局部图片 2.技术选型 技术的选型主要是针对截图功能的选型, ...