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

            var incomingHeaders = storage.Load() ?? new Dictionary <string, object>();
            var outgoingHeaders = new Dictionary <string, object>(incomingHeaders);

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

            var defaultOptionsMap = new Dictionary <string, Func <Maybe> >
            {
                { Headers.Persist, () => this.Configuration.Options.IsPersistently() },
                { Headers.Ttl, () => this.Configuration.Options.GetTtl() },
                { Headers.Delay, () => this.Configuration.Options.GetDelay() }
            };

            var publishingOptionsDict = options.GetAll();

            var keys = defaultOptionsMap.Keys.Union(publishingOptionsDict.Keys).Distinct();

            foreach (var key in keys)
            {
                var maybeValue = publishingOptionsDict.ContainsKey(key)
                                     ? publishingOptionsDict[key]
                                     : defaultOptionsMap[key].Invoke();

                if (maybeValue.HasValue)
                {
                    outgoingHeaders[key] = maybeValue.Value;
                }
            }

            return(outgoingHeaders);
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 3
0
 /// <summary>
 /// Отправляет одностороннее сообщение.
 /// </summary>
 /// <param name="label">Метка отправляемого сообщения.</param>
 /// <param name="payload">Тело сообщения.</param>
 /// <param name="options">Заголовки сообщения.</param>
 /// <returns>Задача выполнения отправки сообщения.</returns>
 public Task Send(MessageLabel label, object payload, PublishingOptions options)
 {
     return(this.Send(label, payload, this.ApplyOptions(options)));
 }
Esempio n. 4
0
 public Task Send(object payload, PublishingOptions options)
 {
     return(this.Send(payload, this.ApplyOptions(options)));
 }