如果还没有消费者(RabbitMQ),如何通过交换机发送消息?

时间:2015-02-04 16:23:36

标签: rabbitmq amqp

只有当接收者在发送者之前运行时,我才能收到消息。 但我需要能够在接收器未运行时发送消息。 并在接收器启动时获取它。 有可能吗?

c#示例:

//Send
 Channel.ExchangeDeclare(ExchangeName,"direct");
 Channel.BasicPublish(ExchangeName, "MyRoute", null, body);

//Receive (other app)
 Channel.ExchangeDeclare(ExchangeName,"direct");
 String queueName = Channel.QueueDeclare().QueueName;
 Channel.QueueBind(queueName, ExchangeName, "MyRoute");
 QueueingBasicConsumer consumer = new QueueingBasicConsumer(Channel);
 Channel.BasicConsume(queueName, false, consumer);

 BasicDeliverEventArgs Message=consumer.Queue.DequeueNoWait(null);

1 个答案:

答案 0 :(得分:0)

您正在创建自动删除队列:

String queueName = Channel.QueueDeclare().QueueName;

因此,当您关闭使用者时,会自动删除队列。

如果你想这样做,你必须创建一个持久的队列,而不是将队列绑定到Exchange,如下所示:

channel.queueDeclare("yourQueue", true, false, false, null);

通过这种方式,您无需启动和运行消费者。如果消费者关闭,消息将被存储到队列中。