tnblog
首页
登录

rabbitmq官网上六大版块之二(Direct类型交换机通过routingKey分类型输出)

137人阅读 2019/5/26 11:25 评论:0 手机 收藏 关注
分类: .net后台框架

其实rabbitmq,老师都说得差不多了,下面是老师的连接。

http://www.tnblog.net/aojiancc2/article/UserCategory/134



官网教程连接:https://www.rabbitmq.com/getstarted.html


p表示交换机

中间红色的表示数据

c1,c2表示输出的队列

这图表示交换机中把数据分不同类型的队列进行输出!


实验准备


类型:routingKey 

交换机:myexchange

队列:log_eles,log_error


1,log_eles队列的代码


(1)如下代码可以看见我对这个队列循环创建了三个类型:"info", "debug", "warning" 


(2)然后是EventingBasicConsumer添加事件获取输出消息

(3)最后是BasicConsume开启事件

(2)与(3)之间的好处在于获取数据较多且队列较多时rabbitmq将会自动优化计算方式

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("myexchange", ExchangeType.Direct, true, false, null)



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

        var arr = new string[3] { "info", "debug", "warning" };

        //交换机绑定队列
        for (int i = 0; i < arr.Length; i++)
        {
            //将 error 绑定一下
            channe.QueueBind("log_eles", "myexchange", arr[i], null);

        }
        //应当用到事件
        {
            //官网案例:https://www.rabbitmq.com/tutorials/tutorial-two-dotnet.html
            //可以优化计算压力
            var consumer = new EventingBasicConsumer(channe);
            consumer.Received += (sender, e) =>
            {
                string msg = Encoding.UTF8.GetString(e.Body);
                Console.WriteLine(msg);

            };
            //执行加载的事件
            channe.BasicConsume("log_eles", true, consumer);

        }

        Console.ReadKey();
        Console.Read();
    }
}


2,log_error队列的代码


(1)如下代码log_error队列只有一种类型: error

channe.ExchangeDeclare("myexchange", ExchangeType.Direct, true, false, null);
//当有很多个队列同时在获取数据时
channe.QueueDeclare("log_error", true, false, false, null);

//将 error 绑定一下
channe.QueueBind("log_error", "myexchange","error",null);
//应当用到事件
{
    //官网案例:https://www.rabbitmq.com/tutorials/tutorial-two-dotnet.html
    //可以优化计算压力
    var consumer = new EventingBasicConsumer(channe);
    consumer.Received += (sender, e) =>
    {
        string msg = Encoding.UTF8.GetString(e.Body);
        Console.WriteLine(msg);

    };
    //执行加载的事件
    channe.BasicConsume("log_error", true, consumer);
}

3进行添加数据


(1)添加100条数据,通过routingKey进行不同类型的添加

//创建交换机(直接形交换机) (已有)
channe.ExchangeDeclare("myexchange", ExchangeType.Direct, true, false, null);
//创建队列
//姓名,是否持久化,是否是专有的,是否自动删除,

for (int i = 0; i < 100; i++)
{
    //消息
    var qmsg = $"{i}:你好";
    var msg = Encoding.UTF8.GetBytes(qmsg);
    var level = i % 13 == 0 ? "info" : "error";
    //发布消息
    channe.BasicPublish("myexchange", routingKey: level, basicProperties: null, body: msg);
}
Console.Read();


下面开始实验


1。先创建队列绑定类型与交换机,订阅事件

2。再添入数据


此时可以清楚的看见通过不同的类型对应不同的队列进行输出!

好,我们再来看看,交换机绑定类型的情况


翻译了,哈哈哈


可以发现交换绑定了四种类型,同时也能看见其类型所对应的队列!



本期就这样!

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