public bool Send(string queueName, string routingKey, MessageDto message) { try { lock (_factory) { using (_connection = _factory.CreateConnection()) { using (_model = _connection.CreateModel()) { _model.ExchangeDeclare(_rabbitMQSettings.ExchangeName, _rabbitMQSettings.Type, durable: true); _model.QueueDeclare(queueName, true, false, false, null); _model.QueueBind(queueName, _rabbitMQSettings.ExchangeName, routingKey); message.InstanceId = Me.GetInstance().Id; message.RequestId = Guid.NewGuid(); message.CreateAt = DomainUtils.GetLocalDate(); byte[] objsend = ObjectSerialize.Serialize(message); _model.BasicPublish(_rabbitMQSettings.ExchangeName, routingKey, null, objsend); } } } using (var scope = Services.CreateScope()) { var scopedProcessingService = scope.ServiceProvider.GetRequiredService <IMessageService>(); scopedProcessingService.InsertAsync(message).Wait(); } return(true); } catch (System.Exception ex) { System.Console.WriteLine(ex.ToString()); _model.Dispose(); _connection.Dispose(); return(false); } }
private void ReceivedMessage(BasicDeliverEventArgs ea, CancellationToken stoppingToken) { Guid?receivedInstance = null; try { using (var scope = Services.CreateScope()) { var scopedProcessingService = scope.ServiceProvider.GetRequiredService <IMessageService>(); var content = Encoding.UTF8.GetString(ea.Body); var obj = ObjectSerialize.TryParseJson(content, out MessageDto result); if (obj) { receivedInstance = result.InstanceId; if (result.InstanceId != Me.GetInstance().Id) { _logger.LogInformation("processing consumer"); scopedProcessingService.InsertAsync(result); _logger.LogInformation($"consumer received {content}"); } } } } catch (Exception ex) { _channel.BasicPublish(_exchangeName, _routingKey, null, ea.Body); Console.WriteLine(ex.ToString()); } finally { if (receivedInstance.HasValue && receivedInstance.Value != Me.GetInstance().Id) { _channel.BasicAck(ea.DeliveryTag, false); } } }
public async Task <List <MessageDto> > GetSentMessages() { var result = await _messageRepository.GetMessagesByInstance(Me.GetInstance().Id); return(_mapper.Map <List <Message>, List <MessageDto> >(result)); }