我正在使用RabbitMQ构建一个系统。我希望能够做的事情之一是根据记录的消息的严重性将消息直接记录到不同的队列中。错误和异常应该到一个队列立即处理; Trace跟踪日志等不太重要的消息应该到别的地方,所以它们不会堵塞关键日志记录。有没有办法在AMQP路由键中指定“不匹配”?
我想处理这个问题的方法是建立一个Topic交换并将两个队列绑定到交换。然后,我的日志消息将使用其路由密钥中的日志级别发送到正确的队列。但是,我有一个问题,我不知道设置路由密钥的最佳方式。
将我的错误排入正确的队列非常简单 - 将两个队列绑定到交换机,一个使用Error
路由密钥,然后将带有Error
路由密钥的消息发送给它。我希望发送给这个交换机的其他类型的消息转到另一个队列。但我认为你不能描述像!Error
之类的路由键,或者至少它不会出现在我能看到的RabbitMQ教程或AMQP规范中。如果我使用通配符绑定,那么我的错误消息会传递到两个队列。
它看起来像我可以使用备用交易所(http://www.rabbitmq.com/ae.html)做到这一点,但我宁愿用直AMQP如果可能的话坚持和配置不良事件增加了复杂性的另一层我的系统 初始化。
我也可以在我的系统定义路由键每日志级别,而不是Error
低级别的队列明确路线的一切。但是这似乎过于冗长,并增加了维护开销。
有没有比使用AE更好的方式来实现我的目标?
的AE也失败了/是一个贫穷的choce因为任何的匹配就会阻止一个AE消息 - 观察与另一个结合,等等,将改变交流的非常行为预期的行为。 – user2864740
从现在开始,键*必须*用于小的区分集合,并且这些*必须*被明确绑定:无论是或者无法'限制'绑定。这是非常不幸的,我很惊讶这没有适当的解决方案。虽然有人会认为它不是“AMQP 0-9-1”,但具有形成负值集的能力在真实代码中非常非常方便。拥有更灵活的路由器非常方便,我很乐意交易更多的ms /消息。 – user2864740
(也就是说,不幸的是没有可以应用于比赛的'后卫'条件:扩展可能能够做到这一点?) – user2864740