protected override bool PublishInternal(CronusMessage message) { try { if (ReferenceEquals(null, connection) || connection.IsOpen == false) { lock (connectionFactory) { if (ReferenceEquals(null, connection) || connection.IsOpen == false) { connection?.Abort(); connection = connectionFactory.CreateConnection(); connection.AutoClose = false; } } } if (publishModel == null || publishModel.IsClosed) { publishModel = connection.CreateModel(); } IBasicProperties props = publishModel.CreateBasicProperties(); props.Headers = new Dictionary <string, object>() { { message.Payload.GetType().GetContractId(), string.Empty } }; props.Persistent = true; props.Priority = 9; byte[] body = this.serializer.SerializeToBytes(message); var publishDelayInMiliseconds = message.GetPublishDelay(); if (publishDelayInMiliseconds < 1000) { var exchangeName = RabbitMqNamer.GetExchangeName(message.Payload.GetType()); publishModel.BasicPublish(exchangeName, string.Empty, false, props, body); } else { var exchangeName = RabbitMqNamer.GetExchangeName(message.Payload.GetType()) + ".Scheduler"; props.Headers.Add("x-delay", message.GetPublishDelay()); publishModel.BasicPublish(exchangeName, string.Empty, false, props, body); } return(true); } catch (Exception ex) { publishModel?.Abort(); connection?.Abort(); connection = null; publishModel = null; return(false); } }
protected override bool PublishInternal(T message, Dictionary <string, string> messageHeaders) { var cronusMessage = new CronusMessage(message, messageHeaders); byte[] body = serializer.SerializeToBytes(cronusMessage); Dictionary <string, object> routingHeaders = new Dictionary <string, object>() { { cronusMessage.Payload.GetType().GetContractId(), String.Empty } }; EndpointMessage endpointMessage = new EndpointMessage(body, string.Empty, routingHeaders, cronusMessage.GetPublishDelay()); transport.PipelineFactory .GetPipeline(message.GetType()) .Push(endpointMessage); return(true); }