// Determines if the message should be delivered to the queue. If the exchange is marked // with a predicate attribute, the corresponding externally named script is executed to // determine if the message has passing criteria. If no external script is specified, // the exchange's Satisfies method is called. private async Task <bool> SatisfiesExchangeCriteria(MessageExchangeDefinition exchangeDef, IMessage message) { ScriptPredicate predicate = exchangeDef.Exchange.Settings.Predicate; if (predicate != null) { return(await _scriptingSrv.SatisfiesPredicate(message, predicate)); } return(exchangeDef.Exchange.Satisfies(message)); }
private void LogPublishingExchangeMessage(IMessage message, MessageExchangeDefinition exchangeDef) { _logger.LogTraceDetails(RabbitMqLogEvents.MESSAGE_PUBLISHER, "Publishing to Exchange", new { Message = message, ContentType = message.GetContentType(), exchangeDef.Exchange.BrokerName, exchangeDef.Exchange.ExchangeName }); }
private async Task PublishAsync(MessageExchangeDefinition exchangeDef, IMessage message) { if (!await SatisfiesExchangeCriteria(exchangeDef, message)) { return; } IMessageExchange exchange = exchangeDef.Exchange; string[] orderedContentTypes = { message.GetContentType(), exchange.Settings.ContentType }; byte[] messageBody = _serializationMgr.Serialize(message, orderedContentTypes); LogPublishingExchangeMessage(message, exchangeDef); using (var channel = _connMgr.CreateChannel(exchange.BrokerName)) { exchangeDef.Exchange.Publish(channel, message, messageBody); } }