zoukankan      html  css  js  c++  java
  • EXCHANGE中DIRECT的使用

    1、交换机 exchange [direct,fanout,headers,topic ]
    direct:work queues和routing都是直连场景
    BasicGet:主动的去拉取。
    1)work queues:
    默认轮询
    使用 subscribe和publish 发布、订阅的方式

    EventingBasicConsumer:多个consumer可以分摊CPU的计算压力

    2)routing:
    需要创建交换机,并绑定当前的队列
    //第三步:创建exchange
    channel.ExchangeDeclare("myexchange", ExchangeType.Direct, true, false, null);
    //第四步:创建一个队列(queue)并绑定
    channel.QueueDeclare("mytest", true, false, false, null);
    channel.QueueBind("mytest", "myexchange", "mytest", null);

    2、相关代码

    work queues和routing的区别仅仅是是否使用自己设定的交换机,直接展示routing代码,相关资料可以查询:

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

    1)生产者

                //基础配置
                ConnectionFactory factory = new ConnectionFactory()
                {
                    HostName = "10.123.44.12",
                    UserName = "datamip",
                    Password = "datamip"
                };
    
                //第一步:创建connection
                using (var connection = factory.CreateConnection())
                {
                    //第二步:创建channel
                    using (var channel = connection.CreateModel())
                    {
                        //第三步:创建exchange
                        channel.ExchangeDeclare("myexchange", ExchangeType.Direct, true, false, null);
    
                        //第四步:创建一个队列(queue)并绑定
                        channel.QueueDeclare("mytest", true, false, false, null);
                        channel.QueueBind("mytest", "myexchange", "mytest", null);
    
                        //第五步:发布消息
                        for (int i = 0; i < 100; i++)
                        {
                            var msg = Encoding.UTF8.GetBytes(string.Format("{0}:{1}", i, "你好"));
    
                            channel.BasicPublish("myexchange", "mytest", basicProperties: null, body: msg);
                        }
    
                    }
                }
                Console.WriteLine("生产成功!");
                Console.ReadKey();

    2)消费者

                //创建连接工厂
                ConnectionFactory factory = new ConnectionFactory
    			{
    				UserName = "datamip",//用户名
    				Password = "datamip",//密码
    				HostName = "10.123.44.12"//rabbitmq ip
    			};           
                //第一步:创建connection
                using (var connection = factory.CreateConnection())
                {
                    //第二步:创建channel
                    using (var channel = connection.CreateModel())
                    {
    
                        //第三步:声明队列
                        channel.QueueDeclare("mytest",true,false,false,null);
    
                        //处理消息
                        EventingBasicConsumer consumer = new EventingBasicConsumer(channel);
                        consumer.Received += (sender,e)=> {
                            var msg = Encoding.UTF8.GetString(e.Body.ToArray());
                            Console.WriteLine(msg);
                        };
                        //消费
                        channel.BasicConsume("mytest", true, consumer);
                        Console.ReadKey();
                    }
                } 
    

    3、图形解释

  • 相关阅读:
    IL指令列表
    [译].Net中的内存-什么分配在了哪里
    C#中的可空类型
    深入C#并行编程(2) -- 使用线程
    C#自动内存分配
    在C#中使用Json.Net进行序列化和反序列化及定制化
    ASP.NET获取客户端、服务器端基础信息
    MongoDB随笔
    MongoDB.Driver 管道 Aggregate
    MongoDB centos安装问题 error while loading shared libraries: libnetsnmpmibs.so.31
  • 原文地址:https://www.cnblogs.com/sailing92/p/13678699.html
Copyright © 2011-2022 走看看