public async Task <OperateResult> SendAsync(TransportMessage transportMessage) { try { Connect(); var message = new Microsoft.Azure.ServiceBus.Message { MessageId = transportMessage.GetId(), Body = transportMessage.Body, Label = transportMessage.GetName(), CorrelationId = transportMessage.GetCorrelationId() }; foreach (var header in transportMessage.Headers) { message.UserProperties.Add(header.Key, header.Value); } await _topicClient.SendAsync(message); _logger.LogDebug($"Azure Service Bus message [{transportMessage.GetName()}] has been published."); return(OperateResult.Success); } catch (Exception ex) { var wrapperEx = new PublisherSentFailedException(ex.Message, ex); return(OperateResult.Failed(wrapperEx)); } }
public async Task <OperateResult> SendAsync(TransportMessage message) { var producer = _connectionPool.RentProducer(); try { var headers = new Confluent.Kafka.Headers(); foreach (var header in message.Headers) { headers.Add(header.Value != null ? new Header(header.Key, Encoding.UTF8.GetBytes(header.Value)) : new Header(header.Key, null)); } var result = await producer.ProduceAsync(message.GetName(), new Message <string, byte[]> { Headers = headers, Key = message.GetId(), Value = message.Body }); if (result.Status == PersistenceStatus.Persisted || result.Status == PersistenceStatus.PossiblyPersisted) { _logger.LogDebug($"kafka topic message [{message.GetName()}] has been published."); return(OperateResult.Success); } var ex = new PublisherSentFailedException("kafka message persisted failed!"); return(OperateResult.Failed(ex)); } catch (Exception ex) { var wapperEx = new PublisherSentFailedException(ex.Message, ex); return(OperateResult.Failed(wapperEx)); } finally { var returned = _connectionPool.Return(producer); if (!returned) { producer.Dispose(); } } }
public async Task <OperateResult> SendAsync(TransportMessage message) { var connection = _connectionPool.RentConnection(); try { var msg = new Msg(message.GetName(), message.Body); foreach (var header in message.Headers) { msg.Header[header.Key] = header.Value; } var js = connection.CreateJetStreamContext(_jetStreamOptions); var builder = PublishOptions.Builder().WithMessageId(message.GetId()); var resp = await js.PublishAsync(msg, builder.Build()); if (resp.Seq > 0) { _logger.LogDebug($"NATS stream message [{message.GetName()}] has been published."); return(OperateResult.Success); } throw new PublisherSentFailedException("NATS message send failed, no consumer reply!"); } catch (Exception ex) { var warpEx = new PublisherSentFailedException(ex.Message, ex); return(OperateResult.Failed(warpEx)); } finally { _connectionPool.Return(connection); } }
public async Task <OperateResult> SendAsync(TransportMessage message) { var producer = _connectionPool.RentProducer(); try { var headers = new Confluent.Kafka.Headers(); foreach (var header in message.Headers) { headers.Add(header.Value != null ? new Header(header.Key, Encoding.UTF8.GetBytes(header.Value)) : new Header(header.Key, null)); } var result = await producer.ProduceAsync(message.GetName(), new Message <string, byte[]> { Headers = headers, Key = message.Headers.TryGetValue(KafkaHeaders.KafkaKey, out string kafkaMessageKey) && !string.IsNullOrEmpty(kafkaMessageKey) ? kafkaMessageKey : message.GetId(), Value = message.Body }); if (result.Status == PersistenceStatus.Persisted || result.Status == PersistenceStatus.PossiblyPersisted) { _logger.LogDebug($"kafka topic message [{message.GetName()}] has been published."); return(OperateResult.Success); } throw new PublisherSentFailedException("kafka message persisted failed!"); }
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.LogInformation("CAP message '{0}' published, internal id '{1}'", message.GetName(), message.GetId()); 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) { _connectionChannelPool.Return(channel); } } }