Example #1
0
        /// <summary>
        /// Конвертирует настройки публикации сообщения в заголовки сообщения.
        /// </summary>
        /// <param name="requestOptions">Настройки публикации сообщения.</param>
        /// <returns>Заголовки сообщения.</returns>
        private IDictionary <string, object> ApplyOptions(RequestOptions requestOptions)
        {
            IDictionary <string, object> headers = this.ApplyOptions(requestOptions as PublishingOptions);

            Maybe <TimeSpan?> timeout = BusOptions.Pick(requestOptions.Timeout, this.Configuration.Options.GetRequestTimeout());

            if (timeout != null && timeout.HasValue)
            {
                headers[Headers.Timeout] = timeout.Value;
            }

            return(headers);
        }
        /// <summary>
        /// Конвертирует настройки публикации сообщения в заголовки сообщения.
        /// </summary>
        /// <param name="options">Настройки публикации сообщения.</param>
        /// <returns>Заголовки сообщения.</returns>
        private IDictionary <string, object> ApplyOptions(PublishingOptions options)
        {
            var storage       = this.Configuration.Options.GetIncomingMessageHeaderStorage().Value;
            var inputHeaders  = storage.Load() ?? new Dictionary <string, object>();
            var outputHeaders = new Dictionary <string, object>(inputHeaders);

            Headers.ApplyBreadcrumbs(outputHeaders, this.endpoint.Address);
            Headers.ApplyOriginalMessageId(outputHeaders);

            Maybe <bool> persist = BusOptions.Pick(options.Persistently, this.Configuration.Options.IsPersistently());

            Headers.ApplyPersistently(outputHeaders, persist);

            Maybe <TimeSpan?> ttl = BusOptions.Pick(options.Ttl, this.Configuration.Options.GetTtl());

            Headers.ApplyTtl(outputHeaders, ttl);

            return(outputHeaders);
        }
Example #3
0
        /// <summary>
        /// Конвертирует настройки публикации сообщения в заголовки сообщения.
        /// </summary>
        /// <param name="options">Настройки публикации сообщения.</param>
        /// <returns>Заголовки сообщения.</returns>
        private IDictionary <string, object> ApplyOptions(PublishingOptions options)
        {
            var storage = this.Configuration.Options.GetIncomingMessageHeaderStorage().Value;
            var headers = storage.Load() ?? new Dictionary <string, object>();

            if (!headers.ContainsKey(Headers.Breadcrumbs))
            {
                headers[Headers.Breadcrumbs] = this.endpoint.Address;
            }
            else
            {
                headers[Headers.Breadcrumbs] = Headers.GetString(headers, Headers.Breadcrumbs) + this.breadCrumbsTail;
            }

            if (!headers.ContainsKey(Headers.OriginalMessageId))
            {
                headers[Headers.OriginalMessageId] = Guid.NewGuid().ToString("n");
            }

            Logger.Trace(m => m("Идентификатор первого сообщения [{0}].", Headers.GetString(headers, Headers.OriginalMessageId)));

            Maybe <bool> persist = BusOptions.Pick(options.Persistently, this.Configuration.Options.IsPersistently());

            if (persist != null && persist.HasValue)
            {
                headers[Headers.Persist] = persist.Value;
            }

            Maybe <TimeSpan?> ttl = BusOptions.Pick(options.Ttl, this.Configuration.Options.GetTtl());

            if (ttl != null && ttl.HasValue)
            {
                headers[Headers.Ttl] = ttl.Value;
            }

            return(headers);
        }