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 ...
随机推荐
- git 查看/修改用户名、密码
用户名和邮箱地址的作用 用户名和邮箱地址是本地git客户端的一个变量,不随git库而改变. 每次commit都会用用户名和邮箱纪录. github的contributions统计就是按邮箱来统计的. ...
- Web API的参数、多版本和Filter
一.关于API的参数a) Web API在WebApiConfig.cs中配置了路由模板,默认为"api/{controller}/{id}",这与MVC路由模板的区别在于没有{a ...
- android 事件反拦截
有一种方法可以阻止父层的View截获touch事件,就是调用 getParent().requestDisallowInterceptTouchEvent(true);方法.一旦底层View收到tou ...
- Asp.Net Core 使用Quartz基于界面画接口管理做定时任务
今天抽出一点点时间来造一个小轮子,是关于定时任务这块的. 这篇文章主要从一下几点介绍: 创建数据库管理表 创建web项目 引入quarzt nuget 包 写具体配置操作,实现定时任务处理 第一步:创 ...
- XSS(跨站脚本攻击)漏洞解决方案
首先,简单介绍一下XSS定义: 一 . XSS介绍 XSS是跨站脚本攻击(Cross Site Scripting)的缩写.为了和层叠样式表CSS(Cascading Style Sheets)加以区 ...
- Appium学习——Appium工作原理
appium的工具原理 Appium-client>>>>Appium-server>>>>移动设备 ========================= ...
- XP环境下C# 调用Pocess.start()时提示文件找不到的错误解决办法
错误提示如下: System.ComponentModel.Win32Exception (0x80004005): 系统找不到指定的文件. 在 System.Diagnostics.Process. ...
- Excel的快速录入
数据有效性: 1.选择要限制数据有效性的区域: 2.点开[数据]选项卡选择”数据验证“: 3.[设置]中选择”序列": 4.若手动输入则需要将内容使用英文符号分割开来(比如:A级,B级): ...
- EF扩展 更新指定字段
using System.Data.Entity.Infrastructure; using System.Threading.Tasks; /// <summary> /// EF扩展 ...
- C#语言————拼接、插入、替换、删除四种方法
StringBuilder sb = new StringBuilder("hello"); sb.Append("world");//拼接 sb.Insert ...