rabbitmq小记
发topic代码,创建交换器,数据直接按routingKey发送到交换器中,即不需要定义队列:
1 2 3 4 5 6 7 8 9 10 11 12 | using ( var connection = factory.CreateConnection()) { using ( var channel = connection.CreateModel()) { // 创建交换器 channel.ExchangeDeclare( "logs3" , ExchangeType.Topic); // 发送消息 channel.BasicPublish(exchange: "logs3" , routingKey: "red.green" , basicProperties: null , body: Encoding.UTF8.GetBytes($ "测试red.green" )); channel.BasicPublish(exchange: "logs3" , routingKey: "red.yellow.green" , basicProperties: null , body: Encoding.UTF8.GetBytes($ "测试red.yellow.green" )); } } |
接收topic,需要定义队列并绑定到交换器,每个队列中的数据只能被一个消费者获取,即使两个消费都同时接收a.#,如果想多个消费者都收到这个消息,则不同消费者需定义不同的队列:
如果使用了不同的队列,要注意是否有消息不被消费的情况,造成消息累积永远没有人消费
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | private void button6_Click( object sender, EventArgs e) { //接收topic string qname = Guid.NewGuid().ToString(); //如果多个消费者定义的队列名相同,则只能发到一个消费者 cn接收 = this .factory.CreateConnection(); mod接收 = cn接收.CreateModel(); mod接收.QueueDeclare(qname, false , false , true , null ); mod接收.QueueBind(qname, "logs3" , "red.#" ); var consumer = new EventingBasicConsumer(mod接收); mod接收.BasicConsume(qname, true , consumer); //该事件在接收到消息时触发 consumer.Received += Consumer_Received3; } private void Consumer_Received3( object sender, BasicDeliverEventArgs e) { byte [] body = e.Body.ToArray(); //消息字节数组 string message = e.RoutingKey + Encoding.UTF8.GetString(body); //消息内容 sb.AppendLine(message); } |
设置消息超时:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | using ( var connection = factory.CreateConnection()) { using ( var channel = connection.CreateModel()) { Dictionary< string , object > d = new Dictionary< string , object >(); d[ "x-message-ttl" ] = 10 * 1000; //10s超时 string qname = this .txt队列名.Text.Trim(); channel.QueueDeclare(qname, false , false , true , d); //创建一个名称为hello的消息队列 var properties = channel.CreateBasicProperties(); properties.DeliveryMode = 1; //1表示不持久化,2表示持久化(默认) properties.Headers = new Dictionary< string , object >(); properties.Headers[ "文件名" ] = "经.mp4" ; properties.Headers[ "文件长度" ] = "2520" ; string message = qname + DateTime.Now.ToString(); //传递的消息内容 var body = Encoding.UTF8.GetBytes(message); channel.BasicPublish( "" , qname, properties, body); //开始传递 } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
2019-11-20 Windows任务计划