String queue = channel.queueDeclare("test.queue").getQueue();
Rabbitmq Server 会有以下操作:
- 把queue的名称(test.queue)作为routingKey,将当前这个queue binding到一个默认的exchange(名称为空,服务器自动创建的)上
如果我们 binding的话
channel.queueBind("test.queue", "test.exchange", "test.routingkey");
上边和默认的Exchange进行的binding还是会存在的
经过同事lucas多次测试发现,以前认为RoutingKey是唯一的或由Exchange和RoutingKey决定一条唯一的由Exchange到Queue的线路是不正确的
测试结果如下:
Exchange Name
|
Queue Name
|
Routing Key
|
|
test.queue
|
test.queue
|
|
test.queue2
|
test.queue2
|
test.exchange
|
test.queue
|
test.routingkey
|
test.exchange
|
test.queue2
|
test.routingkey
|
test.exchange
|
test.queue
|
test.routingkey2
|
test.exchange1
|
test.queue
|
test.routingkey
|
由结果可以看出,由Exchange,Queue,RoutingKey三个才能决定一个从Exchange到Queue的唯一的线路。
画张图,不是很准确
分享到:
相关推荐
关于rabbitmq的原生api和spring amqp的api的动态绑定exchange,routingKey,queue 说明文地址: http://blog.csdn.net/phantomes/article/details/47284829
channel.basic_publish(exchange='delayed_exchange', routing_key='queue_name', body='Hello, World!', properties=props) print(" [x] Sent 'Hello, World!'") connection.close() ``` 这里的“x-delay”头就是...
channel.queue_bind(queue='delayed_queue', exchange='delayed_exchange', routing_key='') # 发布延迟消息 delay_time = 60 * 1000 # 1分钟延迟 props = pika.BasicProperties(delivery_mode=2, headers={'x-...
在Java客户端中,生产者通过创建一个连接到RabbitMQ服务器的Channel,然后定义交换机(Exchange)和路由键(Routing Key),最后发布消息到指定的交换机。 2. **消费者(Consumer)**:消费者是从RabbitMQ接收消息的应用...
rabbitmqadmin declare binding source=delayed_exchange destination=my_queue routing_key=my_routing_key ``` 4. **消费消息**:消费者可以从`my_queue`队列中正常接收延迟后到达的消息。 **应用场景** 1. **...
rabbitmqadmin declare binding source=my_delayed_exchange destination=my_delayed_queue routing_key=* ``` 4. 发布延迟消息:发布消息时,添加`x-delay`头,例如: ``` rabbitmqadmin publish exchange=my_...
5. **绑定(Binding)**:将交换器和队列关联起来,并指定一个路由键(Routing Key),根据这个键来决定消息如何被路由到队列。 6. **发布/消费(Publish/Consume)**:发布者通过交换器将消息发送到队列,消费者则...
`BasicPublish`方法是发布消息的主要接口,需要指定交换机(Exchange)、路由键(Routing Key)以及实际的消息内容。交换机决定了消息如何分发,路由键则与队列(Queue)绑定规则关联。 4. 消息消费:接收方称为...
channel.basicPublish(EXCHANGE_NAME, ROUTING_KEY, MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes("UTF-8")); ``` - **Spring方式**: 使用`RabbitTemplate`的`convertAndSend`方法,指定`...
channel.basicPublish("exchangeName", "routingKey", null, message.getBytes()); // 接收消息 GetResponse response = channel.basicGet("queueName", false); if (response != null) { byte[] body = response....
对于`SEND`帧,目的地通常为`/exchange/<exchangeName>/[/routingKey]`,这表示消息将被发送到定义的交换机,并指定`routingKey`。`routingKey`用于决定消息如何路由到不同的队列,基于交换机的类型和绑定规则。 2...
Exchange, RoutingKey: string; Properties: PMessageProperties; Body: TBytes); begin // 处理消息 Writeln('Received message: ' + UTF8ToString(Body)); // 如果不需要重新处理,确认消息已被消费 Channel....
`rabbitmq-laravel` 包支持发布和绑定交换机,可以创建不同类型(如 direct、topic、fanout 等)的交换机,并使用路由键(routing key)进行消息分发。此外,还可以利用死信队列(dead letter queues)处理错误任务...
$queue->bind('my_exchange', 'routing_key'); $queue->consume('my_callback_function'); ``` ### 应用场景 - **异步处理**: 将耗时的任务(如发送邮件、生成报表)放入消息队列,后台进程处理,提升Web应用...
$message->delivery_info['routing_key'], true, // mandatory false, // immediate array('correlation_id' => $message->get_properties()['correlation_id']) // 设置响应关联ID ); RabbitMq::connection...
在RabbitMQ中,生产者(Producer)负责发送消息,消费者(Consumer)负责接收消息,两者通过交换机(Exchange)和队列(Queue)进行连接。交换机根据预设的路由规则将消息分发到相应的队列,队列则作为消息的临时...
rabbitmq_basic_publish(channel, exchange_name, routing_key, properties, message); ... // 关闭连接 rabbitmq_connection_close(conn); rabbitmq_destroy_connection(conn); } ``` 创建一个消费者应用...
3. **绑定(Binding)**:绑定定义了交换机如何将消息路由到队列,通常包含路由键(Routing Key),用于指定消息的匹配规则。 4. **生产者(Producer)**:生产者是发送消息到RabbitMQ的组件,它们不关心消息最终会...
rabbitTemplate.convertAndSend("delay-exchange", "delay-routing-key", message, new MessagePostProcessor() { @Override public Message postProcessMessage(Message message) throws AmqpException { ...
routing_key='some_queue', body=message_data, properties=pika.BasicProperties( delivery_mode=2, # make message persistent headers={'x-delay': 5000} # delay by 5 seconds ) ) ``` 在这个例子中,...