tnblog
首页

rabbitmq中Header类型交换机的处理(and与or的处理)

56人阅读 2019/6/3 18:12 评论:0 手机浏览 收藏
分类: .net后台框架

headers类型交换机

是通过 muliple attributes 代替 routing key.

x-match [all/any]

     all: 所有地方header头信息必须匹配

     any:只要有一个匹配就ok了

说白了就是||和&&的关系

代码】】

any的写法:

if(name=="jack" || age==20)

{

  queue1.add(msg);

}

all的写法:

if(name=="jack" && age==20)

{

  queue2.add(msg);

}

消费端:

//创建一个连接工厂
ConnectionFactory factory = new ConnectionFactory()
{
    HostName = "192.168.1.63",
    UserName = "hbadmin",
    Password = "hbadmin"
};
//创建一个连接
using (var conntion = factory.CreateConnection())
{

    //创建channe
    using (var channe = conntion.CreateModel())
    {


        //创建交换机(直接形交换机) (已有)
        channe.ExchangeDeclare("myheadersexchange", ExchangeType.Headers, true, false



        //创建队列
        //姓名,是否持久化,是否是专有的,是否自动删除,
        //当有很多个队列同时在获取数据时
        channe.QueueDeclare("myheadersqueue1", true, false, false, null);

        var dic = new Dictionary<string, object>();
         dic.Add("x-match", "any");
        //dic.Add("x-match", "all");
        dic.Add("username", "jack");
        dic.Add("password", "12345");

        //交换机绑定队列
        channe.QueueBind("myheadersqueue1", "myheadersexchange", string.Empty, dic);
        //应当用到事件
        {
            var consumer = new EventingBasicConsumer(channe);
            consumer.Received += (sender, e) =>
            {
                string msg = Encoding.UTF8.GetString(e.Body);
                Console.WriteLine(msg);
            };
            //执行加载的事件
            channe.BasicConsume("myheadersqueue1", true, consumer);
            Console.WriteLine("consumerl端启动完毕!!!");
        }
        Console.Read();
    }
}

数据服务端:

ConnectionFactory factory = new ConnectionFactory()
{
    HostName = "192.168.1.63",
    UserName = "hbadmin",
    Password = "hbadmin"
};
//创建一个连接
using (var conntion = factory.CreateConnection())
{

    //创建channe
    using (var channe = conntion.CreateModel())
    {
        var properties = channe.CreateBasicProperties();
        properties.Headers = new Dictionary<string,object>();
        properties.Headers.Add("username", "jack");
        properties.Headers.Add("password", "123");

        for (int i = 0; i < 100; i++)
        {
            var qmsg = $"{i}:你好";
            //消息
            var msg = Encoding.UTF8.GetBytes(qmsg);

            //发布消息
            channe.BasicPublish("myheadersexchange", routingKey: string.Empty, basicProperties: properties, body: msg);

        }
        Console.Read();
    }
}

当把消费端改为any时:

当把消费端改为all时:

评价
!咖喱棒!
文章
6
评论
8
分类
16
关注
16
{{item.ArticleTitle}}
{{item.BlogName}} : {{item.Content}}