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、图形解释

原文地址:https://www.cnblogs.com/sailing92/p/13678699.html