public IModel Configure() { var channel = _consumerConnection.CreateModel(); // configure this context as consumer _consumer.Configure(channel); var consumer = new EventingBasicConsumer(channel); // add my event handler to Received event in rmq consumer.Received += (model, ea) => { // bytes to string string body = Encoding.UTF8.GetString(ea.Body); // string to JObject JObject jBody = JObject.Parse(body); bool isProcessed = false; // txs must be share with domain event handler dispatched following using (var scope = new TransactionScope()) { RmqConsumeMessage processedMessage = _consumedMessageStore.GetByMessageId(Guid.Parse((string)jBody["messageId"])); // if message already exists, this means the message processed before if (processedMessage != null) { isProcessed = true; } } if (isProcessed) { // return ack to delete redelivered message in queue channel.BasicAck(ea.DeliveryTag, false); } else { // get type of event DomainEventTypeConstants eventType = (DomainEventTypeConstants)(int)jBody["domainEventType"]; // get event from domain event factory IDomainEvent targetDomainEvent = _domainEventFactory.Get(eventType, jBody["content"].ToObject <JObject>()); // publish target event with mediator _mediator.Publish(targetDomainEvent); // acknowledge the delivery channel.BasicAck(ea.DeliveryTag, false); } }; // sign to this channel start service as consumers channel.BasicConsume(queue: _consumer.GetQueueName(), autoAck: false, consumer: consumer); return(channel); }
public void Update(RmqConsumeMessage updatedMessage) { _session.Update(updatedMessage); }
public Guid Create(RmqConsumeMessage message) { return((Guid)_session.Save(message)); }