尘叶心繁

mq交换机的各种类型

电脑版发表于:2019/6/16 16:44


《1》Message TTL

(1) Queue TTL =》   给队列中的所有消息限定一个时间

(2) Message TTL =》  给队列中指定的消息限定一个时间  


《2》Auto Expire 【自动删除】


(1)当我们的队列在规定的时间内没有来访问,就会被删除

consume,basicget,declare...


《3》Max Length 限定队列的最大长度

《4》Max Length Bytes 限定队列的最大占用空间大小。。。

《5》dead-letter当超出最大值转交给另外交换机和另外队列处理(在此之前请先创建好交换机和队列)

《6》Priority实现先进先出

上代码:

看得懂的干,看不懂的。。!

翻前面案例!

//Queue TTL 形式
//创建队列
//姓名,是否持久化,是否是专有的,是否自动删除,

//channe.QueueDeclare("mytest", false, false, false, new Dictionary<string, object>
//{
//    { "x-message-ttl",1000*8 } //表示该消息在发布8秒后消息消失
//});
//channe.BasicPublish(string.Empty, "mytest", null, Encoding.UTF8.GetBytes("乱说"));

//Message TTL 形式
//channe.QueueDeclare("mytest", false, false, false, new Dictionary<string, object>
//{

//});
//var propertes = channe.CreateBasicProperties();
//propertes.Expiration = "8000";//表示该消息在发布8秒后消息消失

//channe.BasicPublish(string.Empty, "mytest", propertes, Encoding.UTF8.GetBytes("乱说"));


//Auto Expire 形式  8秒后将会删除该队列
//channe.QueueDeclare("mytest", false, false, false, new Dictionary<string, object>
//{
//    {"x-expires",1000*8}
//});

//channe.BasicPublish(string.Empty, "mytest", null, Encoding.UTF8.GetBytes("乱说"));

//消息最大
channe.QueueDeclare("mytest", false, false, false, new Dictionary<string, object>
{
    {"x-max-length",10}//最大10条消息,然后是按照最先开始进入队列来出队列的
});
for (int i = 0; i < 15; i++)
{
    channe.BasicPublish(string.Empty, "mytest", null, Encoding.UTF8.GetBytes("乱说:" + i));
}

Console.WriteLine("发布消息完成");
Console.Read();
 ////当大过最大数量将会把消息转至mydead_exchange----mydead_queue队列中进行处理
 //channe.QueueDeclare("mytest", false, false, false, new Dictionary<string, object>
 //{
 //    {"x-max-length",10},//最大10条消息,然后是按照最先开始进入队列来出队列的
 //    { "x-dead-letter-exchange","mydead_exchange"},
 //    { "x-dead-letter-routing-key","mydead_queue"}
 //});
 //for (int i = 0; i < 15; i++)
 //{
 //    channe.BasicPublish(string.Empty, "mytest", null, Encoding.UTF8.GetBytes("乱说:" + i));
 //}

 //Console.Read();

 //Priority实现先进先出
 channe.QueueDeclare("mytest", false, false, false, new Dictionary<string, object>
 {
     {"x-max-length",10},//最大10条消息,然后是按照最先开始进入队列来出队列的
 });
 var prox = channe.CreateBasicProperties();

 for (int i = 0; i < 15; i++)
 {
     prox.Priority = (byte)i;//倒序 先进先出
     channe.BasicPublish(string.Empty, "mytest", prox, Encoding.UTF8.GetBytes("乱说:" + i));
 }

 Console.Read();

第五条补充先要执行的代码:


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

//将 error 绑定一下
channe.QueueBind("mydead_queue", "mydead_exchange", "mydead_queue", 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("mydead_queue", true, consumer);

}

Console.ReadKey();

再见各位!

关于TNBLOG
TNBLOG,技术分享。技术交流:群号677373950
ICP备案 :渝ICP备18016597号-1
App store Android
精彩评论
{{item.replyName}}
{{item.content}}
{{item.time}}
{{subpj.replyName}}
@{{subpj.beReplyName}}{{subpj.content}}
{{subpj.time}}
猜你喜欢