Я недавно поигрался с RabbitMQ и Java API, особенно с обменами topi c (см. Урок 5 RabbitMQ ( 1 )).
Теперь я не действительно понимаю, как именно биржа сопоставляет очереди по ключу. В документации AMQP 0.9.1 ( 2 ) сказано:
Тип обмена topi c работает следующим образом:
- A очередь сообщений привязывается к обмену с помощью шаблона маршрутизации P.
- Издатель отправляет обмену сообщение с ключом маршрутизации R.
- Сообщение передается в очередь сообщений, если R соответствует P .
Ключ маршрутизации, используемый для обмена topi c, ДОЛЖЕН состоять из нуля или более слов, разделенных точками. Каждое слово может содержать буквы AZ и az и цифры 0-9. Шаблон маршрутизации следует тем же правилам, что и ключ маршрутизации, с добавлением, что * соответствует одному слову, а # соответствует нулю или нескольким словам. Таким образом, шаблон маршрутизации * .stock. # Соответствует ключам маршрутизации usd.stock и eur.stock.db, но не stock.nasdaq.
Исходя из этого, я предполагаю, что ключ маршрутизации requests.
не соответствует шаблону маршрутизации requests.*
, потому что *
соответствует слову (тогда как для #
он явно говорит ноль или более слов).
В руководстве RabbitMQ 1 также говорится, что
- (звездочка) может заменять ровно одно слово.
Но когда я попробовал это, потребитель получил сообщения с ключом маршрутизации requests.
.
Вот мой потребитель:
private void Subscribe() throws IOException {
queueName = channel.queueDeclare().getQueue();
channel.queueBind(queueName, Constants.TOPIC_EXCHANGE, Constants.ROUTING_KEY_ALL_REGIONS);
channel.basicConsume(queueName, true, this::HandleMessage, s -> {});
}
private void HandleMessage(String tag, Delivery delivery) {
System.out.println(String.format("received message with routing key '%s'", delivery.getEnvelope().getRoutingKey()));
}
Вот результат Обработчика:
received message with routing key 'requests.'
received message with routing key 'requests. '
received message with routing key 'requests.#'
received message with routing key 'requests.test'
Где я могу найти конкретную документацию / семантику, что подразумевается под словом et c.?
Спасибо, с уважением,
Michael