我基本上是在RabbitMQ上工作。我正在编写一个python代码,其中在进行主题交换的情况下试图查看路由键是否与绑定模式匹配。我遇到了此链接-https://www.rabbitmq.com/tutorials/tutorial-five-java.html,其中说-“但是,绑定键有两个重要的特殊情况:

* (star) can substitute for exactly one word.

# (hash) can substitute for zero or more words.


那么如何将消息的路由键与队列的绑定模式匹配?例如,消息的路由键是“ my.routing.key”,并且队列以绑定模式“ my。#。*”绑定到主题交换。通常,如何匹配这些字符串模式以进行主题交换,最好是我希望使用python regex。

最佳答案

我有一些Java代码可以帮助您

Pattern toRegex(String pattern) {
    final String word = "[a-z]+";

    // replace duplicate # (this makes things simpler)
    pattern = pattern.replaceAll("#(?:\\.#)+", "#");

    // replace *
    pattern = pattern.replaceAll("\\*", word);

    // replace #

    // lone #
    if ("#".equals(pattern)) return Pattern.compile("(?:" + word + "(?:\\." + word + ")*)?");

    pattern = pattern.replaceFirst("^#\\.", "(?:" + word + "\\.)*");
    pattern = pattern.replaceFirst("\\.#", "(?:\\." + word + ")*");

    // escape dots that aren't escapes already
    pattern = pattern.replaceAll("(?<!\\\\)\\.", "\\\\.");

    return Pattern.compile("^" + pattern + "$");
}


也许有人可以将其转换为phyton。

10-07 19:56
查看更多