为什么要在RabbitMQ中声明交换?

用户名

我正在使用RabbitMQ进行项目。我的代码如下。

制片人:

public static void Main()
{
    var factory = new ConnectionFactory() { HostName = "localhost" };
    using (var connection = factory.CreateConnection())
    {
        using (var channel = connection.CreateModel())
        {
            channel.QueueDeclare("hello", false, false, false, null);

            string message = "Hello World!";
            var body = Encoding.UTF8.GetBytes(message);

            channel.BasicPublish("", "hello", null, body);
            Console.WriteLine(" [x] Sent {0}", message);
        }
    }
}

交易所消费者声明:

public static void Main()
{
    var factory = new ConnectionFactory() { HostName = "localhost" };
    using (var connection = factory.CreateConnection())
    {
        using (var channel = connection.CreateModel())
        {
            channel.ExchangeDeclare("hello", "direct",false, false, false, null);
            channel.QueueDeclare("hello", false, false, false, null);

            var consumer = new QueueingBasicConsumer(channel);
            channel.BasicConsume("hello", true, consumer);

            Console.WriteLine(" [*] Waiting for messages." +
                                     "To exit press CTRL+C");
            while (true)
            {
                var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();

                var body = ea.Body;
                var message = Encoding.UTF8.GetString(body);
                Console.WriteLine(" [x] Received {0}", message);
            }
        }
    }

没有交易所的消费者声明:

public static void Main()
{
    var factory = new ConnectionFactory() { HostName = "localhost" };
    using (var connection = factory.CreateConnection())
    {
        using (var channel = connection.CreateModel())
        {
            channel.QueueDeclare("hello", false, false, false, null);

            var consumer = new QueueingBasicConsumer(channel);
            channel.BasicConsume("hello", true, consumer);

            Console.WriteLine(" [*] Waiting for messages." +
                                     "To exit press CTRL+C");
            while (true)
            {
                var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();

                var body = ea.Body;
                var message = Encoding.UTF8.GetString(body);
                Console.WriteLine(" [x] Received {0}", message);
            }
        }
    }

两种消费者代码都可以正常工作,那么声明交换的主要用途是什么?我很迷惑。谁能澄清?

威克多(Wiktor Zychla)

发布到队列仅允许您实现基本的发布-订阅方案,其中生产者和使用者使用确切的队列。在有多个使用者的情况下,单个消息队列在多个使用者之间分配。

通过发布到交换,由于交换和队列之间路由,您可以创建复杂的方案

例如,扇出交换机将消息路由到所有绑定的队列。这样,您可以有一个生产者和多个使用者,并且每条消息都独立复制到所有绑定队列并独立接收。

交换的另一个示例是主题交换,它根据消息中的路由键和队列上的模式将消息路由到绑定的队列。这引入了标记消息并有条件地传递消息的有趣可能性

有关交换类型及其配置文件的完整参考,请参考文档:

https://www.rabbitmq.com/tutorials/amqp-concepts.html

https://www.rabbitmq.com/getstarted.html

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么要在配置文件中声明<mvc:resources>

来自分类Dev

为什么要在TypeScript中声明“ any”返回类型?

来自分类Dev

为什么要在函数中声明调用javascript类方法?

来自分类Dev

为什么要在构造函数中声明对象属性

来自分类Dev

为什么发布者在Pika RabbitMQ中声明队列a?

来自分类Java

为什么会出现RabbitMQ交换异常?

来自分类Dev

为什么要在wordpress中的ajax ServerInterval升级中交换video.js样式?

来自分类Java

为什么要在类内部声明接口?

来自分类Dev

为什么我需要在docker-compose.yml中显式声明env_file?

来自分类Dev

为什么要在头文件中声明的变量中使用 extern?

来自分类Python

为什么要在python中通过字符串声明unicode?

来自分类Dev

为什么我需要在forloop中声明长度而不直接使用?

来自分类Dev

如果在DomContentLoaded中初始化了,为什么要在底部声明AngularJs

来自分类Dev

为什么要在对象的函数属性中声明变量之前先引用它?

来自分类Dev

为什么我们需要在实体中声明非空构造函数?

来自分类Dev

为什么需要在JAVA的void静态方法签名中声明泛型?

来自分类Dev

为什么要在类对象的声明中写一个“类”?

来自分类Dev

为什么我们需要在 Go 中的 Diffie Hellman 密钥交换算法中恢复公钥

来自分类Dev

为什么不使用RabbitMQ上的默认交换?

来自分类Dev

为什么要在for循环中声明va_list?

来自分类Dev

为什么要在函数体内使用函数声明

来自分类Dev

为什么要在While循环中声明变量

来自分类Dev

PowerShell > 为什么我需要在函数返回值之前在函数中内联声明函数参数?

来自分类Dev

graphql 为什么我需要在解析器参数中声明一个额外的参数

来自分类Dev

为什么我们需要在优先级队列声明中添加一个向量作为参数?

来自分类Dev

为什么要在类中声明变量,甚至在构造函数中将其分配给该变量

来自分类Dev

为什么需要在循环的每次迭代中声明一个变量才能使用它?

来自分类Dev

为什么要在函数的参数中赋值?

来自分类Python

为什么要在Python中关闭文件?

Related 相关文章

  1. 1

    为什么要在配置文件中声明<mvc:resources>

  2. 2

    为什么要在TypeScript中声明“ any”返回类型?

  3. 3

    为什么要在函数中声明调用javascript类方法?

  4. 4

    为什么要在构造函数中声明对象属性

  5. 5

    为什么发布者在Pika RabbitMQ中声明队列a?

  6. 6

    为什么会出现RabbitMQ交换异常?

  7. 7

    为什么要在wordpress中的ajax ServerInterval升级中交换video.js样式?

  8. 8

    为什么要在类内部声明接口?

  9. 9

    为什么我需要在docker-compose.yml中显式声明env_file?

  10. 10

    为什么要在头文件中声明的变量中使用 extern?

  11. 11

    为什么要在python中通过字符串声明unicode?

  12. 12

    为什么我需要在forloop中声明长度而不直接使用?

  13. 13

    如果在DomContentLoaded中初始化了,为什么要在底部声明AngularJs

  14. 14

    为什么要在对象的函数属性中声明变量之前先引用它?

  15. 15

    为什么我们需要在实体中声明非空构造函数?

  16. 16

    为什么需要在JAVA的void静态方法签名中声明泛型?

  17. 17

    为什么要在类对象的声明中写一个“类”?

  18. 18

    为什么我们需要在 Go 中的 Diffie Hellman 密钥交换算法中恢复公钥

  19. 19

    为什么不使用RabbitMQ上的默认交换?

  20. 20

    为什么要在for循环中声明va_list?

  21. 21

    为什么要在函数体内使用函数声明

  22. 22

    为什么要在While循环中声明变量

  23. 23

    PowerShell > 为什么我需要在函数返回值之前在函数中内联声明函数参数?

  24. 24

    graphql 为什么我需要在解析器参数中声明一个额外的参数

  25. 25

    为什么我们需要在优先级队列声明中添加一个向量作为参数?

  26. 26

    为什么要在类中声明变量,甚至在构造函数中将其分配给该变量

  27. 27

    为什么需要在循环的每次迭代中声明一个变量才能使用它?

  28. 28

    为什么要在函数的参数中赋值?

  29. 29

    为什么要在Python中关闭文件?

热门标签

归档