就目前来说,Exchange是与消息发送端有关的,因为它可以指定将消息发送到哪个或哪些队列中。

本篇文章介绍的direct类型就是指定将消息定向发送到哪个队列中。

direct,顾名思义,就是直接的意思。那我就直接开始上代码了!

//首先创建一个连接工厂对象
var factory = new ConnectionFactory() { HostName = "localhost", UserName = "yyt", Password = "yyt888888",VirtualHost="log" };
//然后使用工厂对象创建一个TCP连接
using (var connection = factory.CreateConnection()){
    //在当前连接上创建一根通信的虚拟管道
    using (var channel = connection.CreateModel()) {
        //声明一个交换机
        channel.ExchangeDeclare("e.log",  //交换机名称
                            "direct"); //交换机类型
        //声明一个队列
        channel.QueueDeclare(queue: "q.log.info", //队列名称
                             durable: false,      //当前队列是否持久化
                             exclusive: false,    //是否是私有队列
                             autoDelete: false,   //该队列在最后一个consumer断开之后是否自动删除
                             arguments: null);    //其他配置参数
        //将该队列绑定到交换机,并设置RoutingKey=log.info,以便交换机能通过RoutingKey找到该队列
        channel.QueueBind("q.log.info", //队列名称
                          "e.log",      //交换机名称
                          "log.info");  //自定义的RoutingKey

        //生成二进制消息
        var body = Encoding.UTF8.GetBytes("hello world!");
        //将二进制消息通过交换机发送到队列中
        channel.BasicPublish(exchange: "e.log",      //交换机
                             routingKey: "log.info", //RoutingKey
                             basicProperties: null,  //先让它为空
                             body: body);            //发送的消息(二进制数据)
        
    }
}

运行程序后,我们到RabbitMQ的web管理界面去看看。

在浏览器地址栏中输入:localhost:15672

输入用户名和密码进入后,在Exchange栏可以看到如下画面:

证明创建了一个direct类型的交换机(e.log),点进去看看。

可以看到该交换机绑定了名为q.log.info的队列,并生成了一个名为log.info的RoutingKey。以后该交换机就可以通过log.info找到队列q.log.info,并把消息储存在该队列中。

接下来我们点开Queue标签看看。

可以看到有一个名为q.log.info的队列,里面存了一个消息。

点击这个队列名称,让我们来看看消息的内容是什么?

点击那个'Get Message(s)'按钮。看到么,Payload的内容就是我们发送的消息。

操作演示成功!

最后让我们喊出我们的口号:捉住那只兔子,炖了它!

 

 posted on 2017-12-23 15:42  F风  阅读(244)  评论(0编辑  收藏  举报