公司网站开发 中山,网络营销作业策划方案,班组安全建设 网站,网站技术部门架构使用RabbitMQ的优点 1.性能全面#xff0c;rabbitmq性能比较全面#xff0c;是消息中间件的首选 2.高并发#xff0c;rabbitmq实现语言是天生就具备高并发高可用的erlang语言 3.任务异步处理#xff0c;将不需要同步处理的并且耗时长的操作由消息队列通知消息接受方进行异步…使用RabbitMQ的优点 1.性能全面rabbitmq性能比较全面是消息中间件的首选 2.高并发rabbitmq实现语言是天生就具备高并发高可用的erlang语言 3.任务异步处理将不需要同步处理的并且耗时长的操作由消息队列通知消息接受方进行异步处理提高了应用程序的响应时间 4.应用解耦MQ相当于一个中介生产方通过MQ与消费方交互它将应用程序进行解耦 核心API接口和类
IModel表示一个AMQP 通道并提供大多数的操作
IConnection表示一个AMQP连接
ConnectionFactory:构造一个IConnection实例
IBasicConsumer表示一个消息消费者
DefaultBasicConsumer消费者常用的基类 限制
客户端并不支持无符号64位整型ulong,但支持有符号64位整型 使用简介 命名空间引用 using RabbitMQ.Client; 连接到RabbitMQ ConnectionFactory factory new ConnectionFactory(); factory.UserName user; factory.Password pass; factory.VirtualHost vhost; factory.HostName hostName; IConnection conn factory.CreateConnection(); 打开一个通道 IModel channel conn.CreateModel(); 断开连接 channel.close(); conn.close(); 关闭连接后通道也会自动释放掉 connection 是一个长连接底层协议针对长连接做了优化这意味着打开一个新的连接将会有巨大的开销。channel 也是长连接新建通道的开销会小很多一般情况下建议通道也复用不要重复新建。 设置客户端名称方便识别多个客户端强烈建议设置 factory.ClientProvidedName app:audit component:event-consumer; 定义交换机和队列并绑定 channel.ExchangeDeclare(exchangeName, ExchangeType.Direct); channel.QueueDeclare(queueName, false, false, false, null); channel.QueueBind(queueName, exchangeName, routingKey, null); 直接删除 channel.QueueDelete(queue-name, false, false); 删除队列如果为空 channel.QueueDelete(queue-name, false, true); 删除队列如果没有使用没有任何消费者 channel.QueueDelete(queue-name, false, true); 删除队列并清除消息 channel.QueueDelete(queue-name); 发布消息 byte[] messageBodyBytes System.Text.Encoding.UTF8.GetBytes(Hello, world!); channel.BasicPublish(exchangeName, routingKey, null, messageBodyBytes); 对发布消息进行精细控制 byte[] messageBodyBytes System.Text.Encoding.UTF8.GetBytes(Hello, world!); IBasicProperties props channel.CreateBasicProperties(); props.ContentType text/plain; props.DeliveryMode 2; channel.BasicPublish(exchangeName, routingKey, props, messageBodyBytes); 发布消息并带有header 参数 byte[] messageBodyBytes System.Text.Encoding.UTF8.GetBytes(Hello, world!); IBasicProperties props channel.CreateBasicProperties(); props.ContentType text/plain; props.DeliveryMode 2; props.Headers new Dictionarystring, object(); props.Headers.Add(latitude, 51.5252949); props.Headers.Add(longitude, -0.0905493); channel.BasicPublish(exchangeName, routingKey, props, messageBodyBytes); 发布消息带有截至时间 byte[] messageBodyBytes System.Text.Encoding.UTF8.GetBytes(Hello, world!); IBasicProperties props channel.CreateBasicProperties(); props.ContentType text/plain; props.DeliveryMode 2; props.Expiration 36000000; channel.BasicPublish(exchangeName, routingKey, props, messageBodyBytes); 订阅消息 var consumer new EventingBasicConsumer(channel); consumer.Received (ch, ea) { var body ea.Body.ToArray(); // copy or deserialise the payload // and process the message // ... channel.BasicAck(ea.DeliveryTag, false); }; string consumerTag channel.BasicConsume(queueName, false, consumer); 启动自动重连 factory.AutomaticRecoveryEnabled true; //默认重连时间5秒这里设置为10s factory.NetworkRecoveryInterval TimeSpan.FromSeconds(10);