我最近使用过RabbitMQ和Java API,尤其是在主题交流方面(请参见RabbitMQ教程5(1))。
现在,我真的不太了解交换如何基于密钥与队列完全匹配。 在AMQP 0.9.1(2)文档中,内容为:
主题交换类型的工作方式如下:
- 消息队列使用路由模式P绑定到交换机。
- 发布者使用路由键R向交换机发送消息。
- 如果R匹配P,则消息将传递到消息队列。
用于主题交换的路由密钥必须由零个或多个以点分隔的单词组成。每 该单词可能包含字母A-Z和a-z,以及数字0-9。 路由模式遵循与路由密钥相同的规则,并带有*匹配单个 字,而#则匹配零个或多个字。因此,路由模式* .stock。#与路由键匹配 usd.stock和eur.stock.db,但不包括stock.nasdaq。
基于此,我认为路由键requests.
与路由模式requests.*
不不匹配,因为*
与单词匹配(而对于{ {1}}明确说出零个或更多字)。
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()));
}
在哪里可以找到具体的文档/语义,“单词”等是什么意思?
谢谢,
迈克尔