Rabbitmq 有没有一种方法可以指定;“不匹配”;在AMQP路由密钥中?

Rabbitmq 有没有一种方法可以指定;“不匹配”;在AMQP路由密钥中?,rabbitmq,Rabbitmq,我正在使用RabbitMQ构建一个系统。我希望能够做的一件事是根据正在记录的消息的严重性将日志消息直接记录到不同的队列。错误和异常应转到一个队列中立即处理;像跟踪日志这样不太重要的消息应该放在其他地方,这样它们就不会阻塞关键日志 我认为处理这个问题的方法是设置一个主题交换,并将两个队列绑定到该交换。然后,我的日志消息将使用路由密钥中的日志级别发送到正确的队列。但是,我有一个问题,我不知道设置路由密钥的最佳方法 将我的错误放入正确的队列很容易-将两个队列绑定到exchange,一个带有错误路由键,

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

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

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

看起来我可以通过使用备用Exchange()来实现这一点,但如果可能的话,我宁愿使用直接的AMQP,配置AEs会给我的系统增加另一层复杂性 初始化

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


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

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

一边是路由错误,另一边是一切(包括错误)呢?我的意思是,我想您的错误消息将少于跟踪消息(至少我希望是这样);您必须从业务方面“跳过”它们,但我认为它比RabbitMQ扩展更易于管理

PS:我能想到的最近的一件事就是话题交流,但它也会受到同样的限制。查看更多文档。 PPS:如果你愿意,还有其他答案


希望它有帮助:)

AE也会失败/是一个差劲的choce,因为任何匹配程序都会阻止消息发送到AE-通过另一个绑定等观察交换的行为将改变预期的行为。从现在开始,要使用小的鉴别集,必须使用键,并且这些键必须显式绑定:要么这样,要么无法“限制”绑定。这是非常不幸的,我很惊讶这没有合适的解决办法。虽然有人会说这不是“amqp0-9-1”,但在实际代码中,能够形成负集是非常非常方便的。拥有一个更灵活的路由器将非常方便,我很乐意交换更多的ms/消息(也就是说,不幸的是,没有可以应用于匹配的“保护”条件:扩展可能可以做到这一点?)