Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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);
        }