public async Task NotifyAsync(RabbitIndexingMessage rabbitIndexingMessage) { if (_indexerInstanceSettings.SendEventsToRabbit) { await _rabbitQueuePublisher.PublshEventAsync(rabbitIndexingMessage); } }
public async Task PublshEventAsync(RabbitIndexingMessage rabbitEvent) { var notificationJson = Newtonsoft.Json.JsonConvert.SerializeObject(rabbitEvent); var notification = Encoding.UTF8.GetBytes(notificationJson); try { string exchangeForEvent; switch (rabbitEvent.IndexingMessageType) { case IndexingMessageType.Block: exchangeForEvent = _settings.RabbitMq.ExchangeEthereumSamuraiBlocks; break; case IndexingMessageType.ErcBalances: exchangeForEvent = _settings.RabbitMq.ExchangeEthereumSamuraiErcTransfer; break; case IndexingMessageType.ErcContract: exchangeForEvent = _settings.RabbitMq.ExchangeEthereumSamuraiErcContracts; break; default: throw new NotSupportedException("Such Event is not supported yet"); } _channel.BasicPublish ( exchange: exchangeForEvent, routingKey: _settings.RabbitMq.RoutingKey, body: notification ); } catch (AlreadyClosedException e) when(e.ShutdownReason?.ReplyCode == 404) { //TODO: throw; } }