rabbitmq - 有没有办法在 AMQP 路由键中指定 "not matching"?

标签 rabbitmq

我正在使用 RabbitMQ 构建一个系统。我想要做的一件事是根据正在记录的消息的严重性将日志消息直接发送到不同的队列。错误和异常应该进入一个队列立即处理;像跟踪日志这样不太重要的消息应该转移到其他地方,这样它们就不会阻塞关键日志记录。

我认为处理这个问题的方法是设置一个 Topic 交换器并将两个队列绑定(bind)到该交换器。然后,我的日志消息将使用路由键中的日志级别发送到正确的队列。但是,我有一个问题,我不知道设置路由键的最佳方法。

将错误放入正确的队列很容易 - 将两个队列绑定(bind)到交换器,其中一个带有 Error 路由键,然后带有 Error 路由键的消息得到发送给它。我希望发送到此交换的所有其他类型的消息都转到另一个队列。但我不认为你可以描述像 !Error 这样的路由键,或者至少它没有出现在我能看到的 RabbitMQ 教程或 AMQP 规范中。如果我使用通配符绑定(bind),那么我的错误消息将传递到两个队列。

看起来我可以通过使用备用交换 ( http://www.rabbitmq.com/ae.html ) 来完成此任务,但如果可能的话,我宁愿坚持使用直接 AMQP,并且配置 AE 会为我的系统增加另一层复杂性 初始化。

我还可以为系统中的每个日志级别定义路由键,并将所有不是Error的内容显式路由到低级别队列。但这似乎过于冗长并且增加了维护开销。

有比使用 AE 更好的方法来实现我的目标吗?

最佳答案

基本上答案是否定的,通过路由 key 是不可能的;这只是一个“匹配”的东西,而不是正则表达式或类似的东西。

一侧路由错误,另一侧路由所有内容(包括错误)怎么样?我的意思是,我想您收到的错误消息会比跟踪消息少(至少我希望如此);您将不得不“跳过”它们的业务方面,但我认为它比 RabbitMQ 扩展更容易管理。

PS:我能想到的最接近的东西是主题交换,但它也会受到同样的限制。检查this获取更多文档。 PPS:还有this如果您愿意,还有其他答案。

希望有帮助:)

关于rabbitmq - 有没有办法在 AMQP 路由键中指定 "not matching"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36065263/

相关文章:

rabbitmq - 生产者通过消息队列一致地向消费者进行散列?

php - 如何使用 cygwin/mingw 在 Windows 上编译 PHP 扩展?

RabbitMQ 消费者重新连接

c# - 确保事件最终发布到消息队列系统的最佳方式

ssl - Kubernetes 上的 RabbitMQ kubernetes.default.svc.cluster.local tls qlert

postgresql - 如何正确使用 Postgres 触发器中的任务队列

rabbitmq - IBM MQ 中的消息查看

java - 当我设置默认端口时,Rabbitmq 拒绝连接

java - 为 rabbitmq 配置 HAProxy

.net - 从客户端检查 RabbitMQ 队列大小