Exemplo 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 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);
        }
Exemplo n.º 2
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)));
 }
Exemplo n.º 3
0
 public Task Send(object payload, PublishingOptions options)
 {
     return(this.Send(payload, this.ApplyOptions(options)));
 }