Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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);
                }
            }
        }
Beispiel #3
0
        public async Task <List <MessageDto> > GetSentMessages()
        {
            var result = await _messageRepository.GetMessagesByInstance(Me.GetInstance().Id);

            return(_mapper.Map <List <Message>, List <MessageDto> >(result));
        }