【问题标题】:RabbitMQ c# client asynchrony supportRabbitMQ c# 客户端异步支持
【发布时间】:2012-08-18 23:06:49
【问题描述】:

我有这段代码,我使用rabbitmq client。我很好奇这是异步的还是同步的?如果是同步的,我怎样才能让它异步?

        ConnectionFactory factory = new ConnectionFactory();
        factory.HostName = "localhost";
        using (IConnection connection = factory.CreateConnection())
        using (IModel channel = connection.CreateModel())
        {
            channel.QueueDeclare("hello", false, false, false, null);
            for (int i = 0; i < 1000; i++)
            {
                string message = "Hello World!";
                byte[] body = System.Text.Encoding.UTF8.GetBytes(message);

                channel.BasicPublish("", "hello", null, body);

            }

        }

【问题讨论】:

  • 你的问题有点混乱。您将同一条消息发布到队列 1000 次。它应该与什么同步。如果它与正在读取队列的人一起,那么它是异步的。即消费者在下一个发布之前不需要阅读

标签: c# asynchronous rabbitmq


【解决方案1】:

official C# client guide的第2.9章:

应用程序回调处理程序不得调用阻塞 AMQP 操作(例如 IModel.QueueDeclare、IModel.BasicCancel 或 IModel.BasicPublish)。如果他们这样做了,通道就会死锁

BasicPublish 是恕我直言阻塞同步操作。

【讨论】:

  • 我不觉得文档有用。 API 难以理解和实施,产生了很多问题。无论如何感谢您的回答。
  • 你可以看看一些建立在官方 C# 客户端之上的库,例如 EasyNetQ 或 MassTransit(全服务总线实现)
猜你喜欢
  • 2015-11-04
  • 2012-03-24
  • 2013-10-17
  • 2019-11-12
  • 1970-01-01
  • 1970-01-01
  • 2015-06-26
  • 2019-08-20
  • 2014-01-11
相关资源
最近更新 更多