/// <summary> /// 初始化 /// </summary> private void Init() { var channel = _pool.Rent(); try { routeKey = _options.Queue; //创建队列 channel.QueueDeclare(_options.Queue, true, false, false, new Dictionary <string, object>() { //{ "x-message-ttl",60 * 60 * 1000 * 24 * 7}, }); //创建绑定 if (!string.IsNullOrWhiteSpace(_options.Exchange)) { routeKey = $"Key_{routeKey}"; channel.ExchangeDeclare(_options.Exchange, "direct", true); channel.QueueBind(_options.Queue, _options.Exchange, routeKey); } } catch (Exception ex) { Console.WriteLine(ex.Message); } _pool.Return(channel); }
public override Task <OperateResult> PublishAsync(string keyName, string content) { var channel = _connectionChannelPool.Rent(); try { var body = Encoding.UTF8.GetBytes(content); channel.ExchangeDeclare(_exchange, RabbitMQOptions.ExchangeType, true); channel.BasicPublish(_exchange, keyName, null, body); _logger.LogDebug($"RabbitMQ topic message [{keyName}] has been published."); return(Task.FromResult(OperateResult.Success)); } catch (Exception ex) { var wapperEx = new PublisherSentFailedException(ex.Message, ex); var errors = new OperateError { Code = ex.HResult.ToString(), Description = ex.Message }; return(Task.FromResult(OperateResult.Failed(wapperEx, errors))); } finally { var returned = _connectionChannelPool.Return(channel); if (!returned) { channel.Dispose(); } } }
public async Task <Result> PublishAsync(string topic, string message) { var channel = _connectionChannelPool.Rent(); try { var body = Encoding.UTF8.GetBytes(message); channel.ExchangeDeclare(_options.ExchangeName, _options.ExchangeType, true); channel.BasicPublish(_options.ExchangeName, topic, null, body); //_logger.LogDebug($"RabbitMQ topic message [{topic}] has been published."); await Task.CompletedTask; return(Result.Success()); } catch (Exception ex) { return(Result.Failed(ex.Message)); } finally { var returned = _connectionChannelPool.Return(channel); if (!returned) { channel.Dispose(); } } }
public void Publish(object objmsg) { var channel = connectionChannelPool.Rent(); try { channel.ConfirmSelect(); var body = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(objmsg)); channel.ExchangeDeclare(exchange: Exchange, type: ExchangeType, true); channel.QueueDeclare(queue: Queue, durable: true, exclusive: false, autoDelete: false, arguments: null); channel.QueueBind(queue: Queue, exchange: Exchange, routingKey: RoutingKey); var properties = channel.CreateBasicProperties(); properties.DeliveryMode = 2; channel.BasicPublish(exchange: Exchange, routingKey: RoutingKey, mandatory: true, basicProperties: properties, body: body); if (channel.WaitForConfirms()) { BasicAcks(objmsg); } else { BasicNacks(objmsg); } } catch (Exception ex) { logger.LogError($"{ServiceKey}发送消息出错:{ex.StackTrace}"); throw; } finally { var returned = connectionChannelPool.Return(channel); if (!returned) { channel.Dispose(); } } }
public override Task <OperateResult> PublishAsync(string keyName, string content) { #region 个人添加的 var items = keyName.Split(new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries); if (items.Length != 2) { throw new Exception("传入的keyName必须包含routingKey和queueName,并且以短杠隔开!"); } var routingKey = items[0]; var queueName = items[1]; #endregion var channel = _connectionChannelPool.Rent(); try { var body = Encoding.UTF8.GetBytes(content); channel.ExchangeDeclare(_exchange, RabbitMQOptions.ExchangeType, true); #region 个人添加的 var arguments = new Dictionary <string, object> { { "x-message-ttl", _rabbitMQOptions.QueueMessageExpires } }; channel.QueueDeclare(queueName, true, false, false, arguments); channel.QueueBind(queueName, _exchange, routingKey); #endregion channel.BasicPublish(_exchange, routingKey, null, body); _logger.LogDebug($"RabbitMQ topic message [{routingKey}] has been published."); return(Task.FromResult(OperateResult.Success)); } catch (Exception ex) { var wapperEx = new PublisherSentFailedException(ex.Message, ex); var errors = new OperateError { Code = ex.HResult.ToString(), Description = ex.Message }; return(Task.FromResult(OperateResult.Failed(wapperEx, errors))); } finally { var returned = _connectionChannelPool.Return(channel); if (!returned) { channel.Dispose(); } } }
public Task <OperateResult> SendAsync(TransportMessage message) { IModel channel = null; try { channel = _connectionChannelPool.Rent(); channel.ConfirmSelect(); var props = channel.CreateBasicProperties(); props.DeliveryMode = 2; props.Headers = message.Headers.ToDictionary(x => x.Key, x => (object)x.Value); channel.ExchangeDeclare(_exchange, RabbitMQOptions.ExchangeType, true); channel.BasicPublish(_exchange, message.GetName(), props, message.Body); channel.WaitForConfirmsOrDie(TimeSpan.FromSeconds(5)); _logger.LogDebug($"RabbitMQ topic message [{message.GetName()}] has been published."); return(Task.FromResult(OperateResult.Success)); } catch (Exception ex) { var wrapperEx = new PublisherSentFailedException(ex.Message, ex); var errors = new OperateError { Code = ex.HResult.ToString(), Description = ex.Message }; return(Task.FromResult(OperateResult.Failed(wrapperEx, errors))); } finally { if (channel != null) { var returned = _connectionChannelPool.Return(channel); if (!returned) { channel.Dispose(); } } } }
public Task <OperateResult> SendAsync(TransportMessage message) { NetMQSocket channel = null; try { channel = _connectionChannelPool.Rent(); NetMQMessage msg = new NetMQMessage(); msg.Append(message.GetName()); msg.Append(System.Text.Json.JsonSerializer.Serialize(message.Headers.ToDictionary(x => x.Key, x => (object)x.Value))); msg.Append(message.Body); channel.SendMultipartMessage(msg); _logger.LogDebug($"ZeroMQ topic message [{message.GetName()}] has been published."); return(Task.FromResult(OperateResult.Success)); } catch (Exception ex) { var wrapperEx = new PublisherSentFailedException(ex.Message, ex); var errors = new OperateError { Code = ex.HResult.ToString(), Description = ex.Message }; return(Task.FromResult(OperateResult.Failed(wrapperEx, errors))); } finally { if (channel != null) { var returned = _connectionChannelPool.Return(channel); if (!returned) { channel.Dispose(); } } } }
/// <summary> /// Publish the specified channel and message. /// </summary> /// <returns>The publish.</returns> /// <param name="channel">Channel.</param> /// <param name="message">Message.</param> public void Publish(string channel, EasyCachingMessage message) { var _publisherChannel = _connectionChannelPool.Rent(); try { var body = _serializer.Serialize(message); _publisherChannel.ExchangeDeclare(_rabbitMQBusOptions.TopicExchangeName, ExchangeType.Topic, true, false, null); _publisherChannel.BasicPublish(_rabbitMQBusOptions.TopicExchangeName, channel, false, null, body); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { var returned = _connectionChannelPool.Return(_publisherChannel); if (!returned) { _publisherChannel.Dispose(); } } }