RabbitMQ随手笔记(十三)TTL(.netCore2.0)
2018-03-17 11:24
120 查看
两种TTL:如果两种都设置了,按照TTL小的那个处理
1.通过队列属性设置,通过队列发送出去的消息都遵循这个TTL;
2.通过对消息本身单独设置
第一种,一旦消息过期直接丢弃;第二种,即使消息过期,也不一定立刻丢弃,因为只有当消息被投递的时候,才能判断该消息是否过期。
设置队列TTL:
如果不设置TTL,则表示此消息不会过期,如果将TTL设置为0,则表示除非此时可以直接将消息投递到消费者,否则该消息立即被丢弃。 ConnectionFactory factory = new ConnectionFactory();
factory.HostName = IP_ADDRESS;
factory.Port = PORT;
factory.UserName = USER_NAME;
factory.Password = PASSWORD;
con = factory.CreateConnection();
channel = con.CreateModel();
channel.ExchangeDeclare(EXCHANGE_NAME, "topic", true, false, null);
Dictionary<string, object> agres = new Dictionary<string, object>();
//消息TTL01.Queue设置
agres.Add("x-message-ttl", 6000);
//队列TTL设置:1800000ms
agres.Add("x-expires", 1800000);
channel.QueueDeclare(QUEUE_NAME, true, false, false, agres);
channel.QueueBind(QUEUE_NAME, EXCHANGE_NAME, BINDING_KEY, null);//channel.ExchangeBind()
string message = "Hello Word!";
var body = Encoding.UTF8.GetBytes(message);
var properties = channel.CreateBasicProperties();
properties.Persistent = true;
设置消息TTL:
ConnectionFactory factory = new ConnectionFactory();
factory.HostName = IP_ADDRESS;
factory.Port = PORT;
factory.UserName = USER_NAME;
factory.Password = PASSWORD;
con = factory.CreateConnection();
channel = con.CreateModel();
channel.ExchangeDeclare(EXCHANGE_NAME, "topic", true, false, null);
//Dictionary<string, object> agres = new Dictionary<string, object>();
////消息TTL01.Queue设置
//agres.Add("x-message-ttl", 6000);
////队列TTL设置:1800000ms
//agres.Add("x-expires", 1800000);
//channel.QueueDeclare(QUEUE_NAME, true, false, false, agres);
channel.QueueBind(QUEUE_NAME, EXCHANGE_NAME, BINDING_KEY, null);//channel.ExchangeBind()
string message = "Hello Word!";
var body = Encoding.UTF8.GetBytes(message);
var properties = channel.CreateBasicProperties();
properties.Persistent = true;
//消息TTL02.每条消息设置设置,如果两个都设置了,则按照TTL小的那个
properties.Expiration = "6000";//TTL = 6000ms
channel.BasicPublish(EXCHANGE_NAME, ROUTING_KEY, properties, body);
1.通过队列属性设置,通过队列发送出去的消息都遵循这个TTL;
2.通过对消息本身单独设置
第一种,一旦消息过期直接丢弃;第二种,即使消息过期,也不一定立刻丢弃,因为只有当消息被投递的时候,才能判断该消息是否过期。
设置队列TTL:
如果不设置TTL,则表示此消息不会过期,如果将TTL设置为0,则表示除非此时可以直接将消息投递到消费者,否则该消息立即被丢弃。 ConnectionFactory factory = new ConnectionFactory();
factory.HostName = IP_ADDRESS;
factory.Port = PORT;
factory.UserName = USER_NAME;
factory.Password = PASSWORD;
con = factory.CreateConnection();
channel = con.CreateModel();
channel.ExchangeDeclare(EXCHANGE_NAME, "topic", true, false, null);
Dictionary<string, object> agres = new Dictionary<string, object>();
//消息TTL01.Queue设置
agres.Add("x-message-ttl", 6000);
//队列TTL设置:1800000ms
agres.Add("x-expires", 1800000);
channel.QueueDeclare(QUEUE_NAME, true, false, false, agres);
channel.QueueBind(QUEUE_NAME, EXCHANGE_NAME, BINDING_KEY, null);//channel.ExchangeBind()
string message = "Hello Word!";
var body = Encoding.UTF8.GetBytes(message);
var properties = channel.CreateBasicProperties();
properties.Persistent = true;
设置消息TTL:
ConnectionFactory factory = new ConnectionFactory();
factory.HostName = IP_ADDRESS;
factory.Port = PORT;
factory.UserName = USER_NAME;
factory.Password = PASSWORD;
con = factory.CreateConnection();
channel = con.CreateModel();
channel.ExchangeDeclare(EXCHANGE_NAME, "topic", true, false, null);
//Dictionary<string, object> agres = new Dictionary<string, object>();
////消息TTL01.Queue设置
//agres.Add("x-message-ttl", 6000);
////队列TTL设置:1800000ms
//agres.Add("x-expires", 1800000);
//channel.QueueDeclare(QUEUE_NAME, true, false, false, agres);
channel.QueueBind(QUEUE_NAME, EXCHANGE_NAME, BINDING_KEY, null);//channel.ExchangeBind()
string message = "Hello Word!";
var body = Encoding.UTF8.GetBytes(message);
var properties = channel.CreateBasicProperties();
properties.Persistent = true;
//消息TTL02.每条消息设置设置,如果两个都设置了,则按照TTL小的那个
properties.Expiration = "6000";//TTL = 6000ms
channel.BasicPublish(EXCHANGE_NAME, ROUTING_KEY, properties, body);
相关文章推荐
- RabbitMQ随手笔记(二)RabbitMQ-"Hello World" 之生产者(netCore2.0)
- RabbitMQ随手笔记(三)RabbitMQ-“Hello World” 之消费者(.netCore2.0)
- RabbitMQ随手笔记(九)RabbitMQ实现RPC(netCore2.0)
- RabbitMQ随手笔记(四)连接RabbitMQ (.netCore2.0)
- RabbitMQ随手笔记(五)交换器和队列(.netCore2.0)
- RabbitMQ随手笔记(六)发送消息(.netCore2.0)
- RabbitMQ随手笔记(十一)mandatory参数(.netCore2.0)
- RabbitMQ随手笔记(十二)备份交换器(.netCore2.0)
- RabbitMQ随手笔记(八)消费者端确认和拒绝(netCore2.0)
- RabbitMQ随手笔记(十五)持久化(.netCore2.0)
- netCore2.0 Api 跨域(Cors)
- Scott Mitchell 的ASP.NET 2.0数据教程之十三:在DetailsView控件中使用TemplateField
- [翻译]Scott Mitchell 的ASP.NET 2.0数据教程之十三:在DetailsView控件中使用TemplateField
- PowerShell 2.0 实践(十三)管理 TFS 2010(3)
- NetCore 2.0 应用程序在centos 7上通过docker发布
- 【.NetCore学习】ASP.NET Core EF Core2.0 DB First现有数据库自动生成实体Context
- .netcore2.0 Startup 全局配置文件小技巧
- 基于.NET 2.0的GIS开源项目SharpMap分析手记(十三):基于SharpMap的Windows程序界面(C/S架构)
- x01.SportWeb: An Example for AspNetCore 2.0
- 树莓派3中运行Netcore2.0程序