/// <summary> /// 接收消息 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="queueInfo"></param> /// <param name="handler"></param> public IModel ReceiveMessage <T>(RabbitMqQueueModel queueInfo, Func <T, CancellationToken, Task> handler) { if (queueInfo == null) { throw new ArgumentException("消息上不具有任何特性"); } if (handler == null) { throw new NullReferenceException("处理事件为null"); } var channel = GetOrAddModel(queueInfo.ExchangeName, queueInfo.QueueName, queueInfo.RouteKey, queueInfo.ExchangeType, queueInfo.Durable); channel.BasicQos(0, 1, false); var consumer = new EventingBasicConsumer(channel); channel.BasicConsume(queueInfo.QueueName, false, consumer); consumer.Received += async(model, ea) => { await _doAsync(channel, ea, handler); }; return(channel); }
/// <summary> /// 发送消息 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="messageObj"></param> /// <param name="queueInfo"></param> public void SendMessage <T>(T messageObj, RabbitMqQueueModel queueInfo) where T : class { if (queueInfo == null) { throw new ArgumentException("消息上不具有任何特性"); } var channel = GetOrAddModel(queueInfo.ExchangeName, queueInfo.QueueName, queueInfo.RouteKey, queueInfo.ExchangeType, queueInfo.Durable); var properties = channel.CreateBasicProperties(); properties.DeliveryMode = 2; channel.ConfirmSelect(); var body = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(messageObj)); channel.BasicPublish(queueInfo.ExchangeName, queueInfo.RouteKey, properties, body); bool isOk = channel.WaitForConfirms(); if (!isOk) { _logger.LogError("发布消息至对列确认失败。队列内容:{0}", JsonSerializer.Serialize(messageObj)); } }