Exemplo n.º 1
0
        public bool Enqueue(FabricMessage message)
        {
            if (!(Filter?.Invoke(message) ?? true))
            {
                return(false);
            }

            Queue.Enqueue(message);
            return(true);
        }
Exemplo n.º 2
0
 /// <summary>
 /// This helper method signals to the underlying fabric that the message has succeeded or failed.
 /// </summary>
 /// <param name="message">The fabric message.</param>
 /// <param name="success">The message success status.</param>
 public static void MessageSignal(FabricMessage message, bool success)
 {
     if (success)
     {
         message.Complete();
     }
     else
     {
         message.Abandon();
     }
 }
Exemplo n.º 3
0
        public void DeadletterEnqueue(FabricMessage message)
        {
            if (Deadletter == null)
            {
                lock (syncDeadletter)
                {
                    if (Deadletter == null)
                    {
                        Deadletter = new ConcurrentQueue <FabricMessage>();
                    }
                }
            }

            Deadletter.Enqueue(message);
        }
Exemplo n.º 4
0
        /// <summary>
        /// This method packs the ServiceMessage in to the FabricMessage format
        /// for communication through the manual bus. This is used to mimic similar operations in services such as Azure Service Bus.
        /// </summary>
        /// <param name="payload">The payload object to convert to a FabricMessage.</param>
        /// <returns>Returns a FabricMessage object.</returns>
        public static FabricMessage Pack(TransmissionPayload payload)
        {
            ServiceMessage sMessage = payload.Message;
            FabricMessage  bMessage;

            if (sMessage.Blob == null)
            {
                bMessage = new FabricMessage();
            }
            else
            {
                bMessage = new FabricMessage(sMessage.Blob);
            }

            bMessage.Properties.Add("SecuritySignature", sMessage.SecuritySignature);

            bMessage.Properties.Add("OriginatorKey", sMessage.OriginatorKey);
            bMessage.Properties.Add("OriginatorServiceId", sMessage.OriginatorServiceId);
            bMessage.Properties.Add("OriginatorUTC", sMessage.OriginatorUTC.ToString("s", System.Globalization.CultureInfo.InvariantCulture));

            bMessage.Properties.Add("ResponseChannelId", MessagingHelper.ToSafeLower(sMessage.ResponseChannelId));
            bMessage.Properties.Add("ResponseChannelPriority", sMessage.ResponseChannelPriority.ToString());
            bMessage.Properties.Add("ResponseMessageType", MessagingHelper.ToSafeLower(sMessage.ResponseMessageType));
            bMessage.Properties.Add("ResponseActionType", MessagingHelper.ToSafeLower(sMessage.ResponseActionType));

            //FIX: Case sensitive pattern match in ServiceBus.
            bMessage.Properties.Add("ChannelId", MessagingHelper.ToSafeLower(sMessage.ChannelId));
            bMessage.Properties.Add("MessageType", MessagingHelper.ToSafeLower(sMessage.MessageType));
            bMessage.Properties.Add("ActionType", MessagingHelper.ToSafeLower(sMessage.ActionType));

            bMessage.Properties.Add("IsNoop", sMessage.IsNoop ? "1" : "0");
            bMessage.Properties.Add("IsReplay", sMessage.IsReplay ? "1" : "0");

            bMessage.CorrelationId = sMessage.CorrelationServiceId;

            bMessage.Properties.Add("ProcessCorrelationKey", sMessage.ProcessCorrelationKey);

            bMessage.Properties.Add("CorrelationKey", sMessage.CorrelationKey);
            bMessage.Properties.Add("CorrelationServiceId", MessagingHelper.ToSafeLower(sMessage.CorrelationServiceId));
            bMessage.Properties.Add("CorrelationUTC", sMessage.CorrelationUTC.HasValue ? sMessage.CorrelationUTC.Value.ToString("o") : null);

            bMessage.Properties.Add("DispatcherTransitCount", sMessage.DispatcherTransitCount.ToString());

            bMessage.Properties.Add("Status", sMessage.Status);
            bMessage.Properties.Add("StatusDescription", sMessage.StatusDescription);

            return(bMessage);
        }
Exemplo n.º 5
0
        private void Transmit(ManualFabricConnection conn, FabricMessage message)
        {
            if (!Mode.HasValue)
            {
                throw new ArgumentException("Mode is not configured.");
            }
            QueueHolder queue;

            switch (Mode.Value)
            {
            case CommunicationBridgeMode.RoundRobin:
                if (mOutgoing.TryGetValue(cnDefault, out queue))
                {
                    queue.Enqueue(message);
                }
                break;

            case CommunicationBridgeMode.Broadcast:
                mOutgoing.Values.AsParallel().ForEach((c) => c.Enqueue(message));
                break;
            }
        }
Exemplo n.º 6
0
        private void Complete(string queueName, FabricMessage message, bool success, Guid id)
        {
            if (success)
            {
                return;
            }

            message.DeliveryCount++;
            QueueHolder queue;

            if (!mOutgoing.TryGetValue(queueName, out queue))
            {
                return;
            }

            if (message.DeliveryCount < RetryAttemptsMax)
            {
                queue.Enqueue(message);
            }
            else
            {
                queue.DeadletterEnqueue(message);
            }
        }
Exemplo n.º 7
0
 public bool TryDeadletterDequeue(out FabricMessage message)
 {
     message = null;
     return(Deadletter?.TryDequeue(out message) ?? false);
 }
Exemplo n.º 8
0
 public bool TryDequeue(out FabricMessage message)
 {
     return(Queue.TryDequeue(out message));
 }
Exemplo n.º 9
0
        /// <summary>
        /// This method unpacks the FabricMessage message in to a generic ServiceMessage object
        /// which can be processed by the service..
        /// /// </summary>
        /// <param name="bMessage">The FabricMessage to convert.</param>
        /// <returns>Returns a generic ServiceMessage class for processing.</returns>
        public static ServiceMessage Unpack(FabricMessage bMessage)
        {
            var sMessage = new ServiceMessage();

            if (bMessage.Properties.ContainsKey("SecuritySignature"))
            {
                sMessage.SecuritySignature = bMessage.Properties["SecuritySignature"] as string;
            }

            sMessage.EnqueuedTimeUTC = bMessage.EnqueuedTimeUtc;

            sMessage.OriginatorKey       = bMessage.Properties["OriginatorKey"] as string;
            sMessage.OriginatorServiceId = bMessage.Properties["OriginatorServiceId"] as string;
            sMessage.OriginatorUTC       = DateTime.Parse(bMessage.Properties["OriginatorUTC"]);

            sMessage.ResponseChannelId = bMessage.Properties["ResponseChannelId"] as string;
            if (bMessage.Properties.ContainsKey("ResponseMessageType"))
            {
                sMessage.ResponseMessageType = bMessage.Properties["ResponseMessageType"] as string;
            }
            if (bMessage.Properties.ContainsKey("ResponseActionType"))
            {
                sMessage.ResponseActionType = bMessage.Properties["ResponseActionType"] as string;
            }

            if (bMessage.Properties.ContainsKey("ResponseChannelPriority"))
            {
                string value = bMessage.Properties["ResponseChannelPriority"] as string;
                int    responsePriority;
                if (string.IsNullOrEmpty(value) || !int.TryParse(value, out responsePriority))
                {
                    responsePriority = 0;
                }
                sMessage.ResponseChannelPriority = responsePriority;
            }

            sMessage.ChannelId   = bMessage.Properties["ChannelId"] as string;
            sMessage.MessageType = bMessage.Properties["MessageType"] as string;
            sMessage.ActionType  = bMessage.Properties["ActionType"] as string;

            sMessage.IsNoop   = bMessage.Properties["IsNoop"] as string == "1";
            sMessage.IsReplay = bMessage.Properties["IsReplay"] as string == "1";

            if (bMessage.Properties.ContainsKey("ProcessCorrelationKey"))
            {
                sMessage.ProcessCorrelationKey = bMessage.Properties["ProcessCorrelationKey"] as string;
            }

            sMessage.CorrelationKey       = bMessage.Properties["CorrelationKey"] as string;
            sMessage.CorrelationServiceId = bMessage.Properties["CorrelationServiceId"] as string;
            DateTime serviceUTC;

            if (bMessage.Properties.ContainsKey("CorrelationUTC") &&
                DateTime.TryParse(bMessage.Properties["CorrelationUTC"] as string, out serviceUTC))
            {
                sMessage.CorrelationUTC = serviceUTC;
            }

            sMessage.DispatcherTransitCount = int.Parse(bMessage.Properties["DispatcherTransitCount"]);

            sMessage.Status            = bMessage.Properties["Status"] as string;
            sMessage.StatusDescription = bMessage.Properties["StatusDescription"] as string;

            sMessage.Blob = bMessage.Message;

            sMessage.FabricDeliveryCount = bMessage.DeliveryCount;

            return(sMessage);
        }