Example #1
0
        public void SendRequest <TRequest, TReply>(IList <string> endPoints, TRequest message, Action <IList <TReply> > callback, Dictionary <string, string> headers = null) where TRequest : Message where TReply : Message
        {
            var messageId = Guid.NewGuid();
            IRequestConfiguration configuration = Configuration.GetRequestConfiguration(messageId);

            configuration.EndpointsCount = endPoints.Count;

            var responses = new List <TReply>();

            configuration.SetHandler(r =>
            {
                responses.Add((TReply)r);
                if (configuration.EndpointsCount == configuration.ProcessedCount)
                {
                    callback(responses);
                }
            });

            lock (_requestLock)
            {
                _requestConfigurations[messageId.ToString()] = configuration;
            }

            if (headers == null)
            {
                headers = new Dictionary <string, string>();
            }

            headers["RequestMessageId"] = messageId.ToString();

            var messageString = JsonConvert.SerializeObject(message);
            var messageBytes  = Encoding.UTF8.GetBytes(messageString);

            if (Configuration.OutgoingFilters != null && Configuration.OutgoingFilters.Count > 0)
            {
                var envelope = new Envelope
                {
                    Headers = headers.ToDictionary(x => x.Key, x => (object)x.Value),
                    Body    = messageBytes
                };

                var stop = ProcessFilters(Configuration.OutgoingFilters, envelope);
                if (stop)
                {
                    return;
                }

                headers      = envelope.Headers.ToDictionary(x => x.Key, x => x.Value.ToString());
                messageBytes = envelope.Body;
            }

            foreach (string endPoint in endPoints)
            {
                _producer.Send(endPoint, typeof(TRequest), messageBytes, headers);
            }
        }
Example #2
0
        public IList <TReply> SendRequest <TRequest, TReply>(IList <string> endPoints, TRequest message, Dictionary <string, string> headers, int timeout) where TRequest : Message where TReply : Message
        {
            var messageId = Guid.NewGuid();
            IRequestConfiguration configuration = Configuration.GetRequestConfiguration(messageId);

            var responses = new List <TReply>();

            configuration.EndpointsCount = endPoints.Count;

            Task task = configuration.SetHandler(r => responses.Add((TReply)r));

            lock (_busState.RequestLock)
            {
                _busState.RequestConfigurations[messageId.ToString()] = configuration;
            }

            if (headers == null)
            {
                headers = new Dictionary <string, string>();
            }

            headers["RequestMessageId"] = messageId.ToString();
            var messageString = JsonConvert.SerializeObject(message);
            var messageBytes  = Encoding.UTF8.GetBytes(messageString);

            if (Configuration.OutgoingFilters != null && Configuration.OutgoingFilters.Count > 0)
            {
                var envelope = new Envelope
                {
                    Headers = headers.ToDictionary(x => x.Key, x => (object)x.Value),
                    Body    = messageBytes
                };

                var stop = ProcessFilters(Configuration.OutgoingFilters, envelope);
                if (stop)
                {
                    return(responses);
                }

                headers      = envelope.Headers.ToDictionary(x => x.Key, x => x.Value.ToString());
                messageBytes = envelope.Body;
            }

            foreach (var endPoint in endPoints)
            {
                _sendMessagePipeline.ExecuteSendMessagePipeline(typeof(TRequest), messageBytes, headers, endPoint);
            }

            Task.WaitAll(new[] { task }, timeout);

            return(responses);
        }
Example #3
0
        public void SendRequest <TRequest, TReply>(string endPoint, TRequest message, Action <TReply> callback, Dictionary <string, string> headers) where TRequest : Message where TReply : Message
        {
            var messageId = Guid.NewGuid();
            IRequestConfiguration configuration = Configuration.GetRequestConfiguration(messageId);

            configuration.EndpointsCount = 1;

            configuration.SetHandler(r => callback((TReply)r));

            lock (_busState.RequestLock)
            {
                _busState.RequestConfigurations[messageId.ToString()] = configuration;
            }

            if (headers == null)
            {
                headers = new Dictionary <string, string>();
            }

            headers["RequestMessageId"] = messageId.ToString();

            var messageString = JsonConvert.SerializeObject(message);
            var messageBytes  = Encoding.UTF8.GetBytes(messageString);

            if (Configuration.OutgoingFilters != null && Configuration.OutgoingFilters.Count > 0)
            {
                var envelope = new Envelope
                {
                    Headers = headers.ToDictionary(x => x.Key, x => (object)x.Value),
                    Body    = messageBytes
                };

                var stop = ProcessFilters(Configuration.OutgoingFilters, envelope);
                if (stop)
                {
                    return;
                }

                headers      = envelope.Headers.ToDictionary(x => x.Key, x => x.Value.ToString());
                messageBytes = envelope.Body;
            }

            if (string.IsNullOrEmpty(endPoint))
            {
                _sendMessagePipeline.ExecuteSendMessagePipeline(typeof(TRequest), messageBytes, headers);
            }
            else
            {
                _sendMessagePipeline.ExecuteSendMessagePipeline(typeof(TRequest), messageBytes, headers, endPoint);
            }
        }
Example #4
0
        public IList <TReply> PublishRequest <TRequest, TReply>(TRequest message, int?expectedCount, Dictionary <string, string> headers, int timeout) where TRequest : Message
        {
            var messageId = Guid.NewGuid();
            IRequestConfiguration configuration = Configuration.GetRequestConfiguration(messageId);

            var responses = new List <TReply>();

            configuration.EndpointsCount = expectedCount ?? -1;

            Task task = configuration.SetHandler(r => responses.Add((TReply)r));

            lock (_requestLock)
            {
                _requestConfigurations[messageId.ToString()] = configuration;
            }

            if (headers == null)
            {
                headers = new Dictionary <string, string>();
            }

            headers["RequestMessageId"] = messageId.ToString();

            var messageString = JsonConvert.SerializeObject(message);
            var messageBytes  = Encoding.UTF8.GetBytes(messageString);

            if (Configuration.OutgoingFilters != null && Configuration.OutgoingFilters.Count > 0)
            {
                var envelope = new Envelope
                {
                    Headers = headers == null ? new Dictionary <string, object>() : headers.ToDictionary(x => x.Key, x => (object)x.Value),
                    Body    = messageBytes
                };

                var stop = ProcessFilters(Configuration.OutgoingFilters, envelope);
                if (stop)
                {
                    return(responses);
                }

                headers      = envelope.Headers.ToDictionary(x => x.Key, x => x.Value.ToString());
                messageBytes = envelope.Body;
            }

            _producer.Publish(typeof(TRequest), messageBytes, headers);

            Task.WaitAll(new[] { task }, timeout);

            return(responses);
        }
Example #5
0
        public TReply SendRequest <TRequest, TReply>(string endPoint, TRequest message, Dictionary <string, string> headers, int timeout) where TRequest : Message where TReply : Message
        {
            var messageId = Guid.NewGuid();
            IRequestConfiguration configuration = Configuration.GetRequestConfiguration(messageId);

            configuration.EndpointsCount = 1;

            TReply response = default(TReply);

            Task task = configuration.SetHandler(r =>
            {
                response = (TReply)r;
            });

            lock (_requestLock)
            {
                _requestConfigurations[messageId.ToString()] = configuration;
            }

            if (headers == null)
            {
                headers = new Dictionary <string, string>();
            }

            headers["RequestMessageId"] = messageId.ToString();
            var messageString = JsonConvert.SerializeObject(message);
            var messageBytes  = Encoding.UTF8.GetBytes(messageString);

            if (Configuration.OutgoingFilters != null && Configuration.OutgoingFilters.Count > 0)
            {
                var envelope = new Envelope
                {
                    Headers = headers.ToDictionary(x => x.Key, x => (object)x.Value),
                    Body    = messageBytes
                };

                var stop = ProcessFilters(Configuration.OutgoingFilters, envelope);
                if (stop)
                {
                    return(response);
                }

                headers      = envelope.Headers.ToDictionary(x => x.Key, x => x.Value.ToString());
                messageBytes = envelope.Body;
            }

            if (string.IsNullOrEmpty(endPoint))
            {
                _producer.Send(typeof(TRequest), messageBytes, headers);
            }
            else
            {
                _producer.Send(endPoint, typeof(TRequest), messageBytes, headers);
            }

            Task.WaitAll(new[] { task }, timeout);


            if (!task.IsCompleted)
            {
                throw new TimeoutException();
            }

            return(response);
        }