示例#1
0
        public async Task <IBusMessage> ReciveAsync(IBusMessage request)
        {
            try
            {
                if (!_producer.Push(request))
                {
                    throw new Exception("Error: message not sent!");
                }

                CancellationToken token = TokenHelper.GetToken(_config.ResponseTimeout);
                var result = await _receiver.ReceiveAsync(request, token);

                if (result == null)
                {
                    result      = request;
                    result.Body = null;
                }
                return(result);
            }
            catch (Exception e)
            {
                _logger?.LogError(e, $"{_connection.ServerInfo}.{typeof(BusQueue).FullName} : {e.Message}");
                request.IsError      = true;
                request.ErrorDetails = e.Message;
                return(request);
            }
        }
示例#2
0
            public bool ShouldAttemptDelivery(IBusMessage message)
            {
                if (message == null)
                {
                    return(false);
                }

                //if (!(typeof(TMessage).IsAssignableFrom(message.GetType())))
                if (!(message is TMessage))
                {
                    return(false);
                }

                if (!_DeliveryAction.IsAlive)
                {
                    return(false);
                }

                if (!_MessageFilter.IsAlive)
                {
                    return(false);
                }

                return(((Func <TMessage, bool>)_MessageFilter.Target).Invoke(message as TMessage));
            }
示例#3
0
            public void Deliver(IBusMessage message)
            {
                if (!(message is TMessage))
                {
                    throw new ArgumentException("Message is not the correct type");
                }

                _DeliveryAction.Invoke(message as TMessage);
            }
示例#4
0
 public async Task <IBusMessage> ReceiveAsync(IBusMessage request, CancellationToken stoppingToken)
 {
     if (!TryCreateChannel())
     {
         return(null);
     }
     using (BusListener listener = new BusListener(_consumer, _logger))
     {
         return(await listener.GetResponseAsync(request.Id, stoppingToken));
     }
 }
示例#5
0
        public static TResult GetResult <TResult>(this IBus <IBusMessage> bus, IBusMessage <TResult> message, TimeSpan?timeout = null)
        {
            var messageType   = message.GetType();
            var publishMethod =
                bus.GetType()
                .GetMethod("Publish", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance)
                .MakeGenericMethod(messageType);

            publishMethod.Invoke(bus, new object[] { message });
            message.Wait(timeout);
            return(message.Result);
        }
示例#6
0
            public void Deliver(IBusMessage message)
            {
                if (!(message is TMessage))
                {
                    throw new ArgumentException("Message is not the correct type");
                }

                if (!_DeliveryAction.IsAlive)
                {
                    return;
                }

                ((Action <TMessage>)_DeliveryAction.Target).Invoke(message as TMessage);
            }
示例#7
0
            public bool ShouldAttemptDelivery(IBusMessage message)
            {
                if (message == null)
                {
                    return(false);
                }

                //if (!(typeof(TMessage).IsAssignableFrom(message.GetType())))
                if (!(message is TMessage))
                {
                    return(false);
                }

                return(_MessageFilter.Invoke(message as TMessage));
            }
示例#8
0
        private static IEnumerable <T> MatchPublish <T>(IBusMessage m)
        {
            switch (m)
            {
            case IPublishMessage pub:
                switch (pub.Message)
                {
                case T match:
                    yield return(match);

                    break;
                }
                break;
            }
        }
示例#9
0
        public static IBusMessage TryExecuteOperationWrapper <T>(IBusMessage item, Func <T, object> operation, ILogger logger = null)
        {
            IBusMessage message = new ResponseMessage(item.Id, item.MessageType);

            try
            {
                T value = item.GetBody <T>();
                message.Body = operation(value);
            }
            catch (Exception ex)
            {
                message.IsError      = true;
                message.ErrorDetails = $"Error : {ex.Message}";
                logger.LogError(ex, $"Error : {ex.Message}");
            }
            return(message);
        }
示例#10
0
 private void MessageReceived(object sender, BasicDeliverEventArgs eventArgument)
 {
     try
     {
         byte[]      body          = eventArgument.Body.ToArray();
         string      bytesAsString = Encoding.UTF8.GetString(body);
         IBusMessage item          = JsonConvert.DeserializeObject <BusMessage>(bytesAsString);
         if (item.Id.Equals(_messageId))
         {
             _queueMessages.Add(item);
         }
     }
     catch (JsonException e)
     {
         _logger?.LogError(e, $"{_serverInfo}.{typeof(BusListener).FullName} : {e.Message}");
     }
 }
示例#11
0
        public static async Task <IBusMessage> TryExecuteOperationWrapperAsync <T>(IBusMessage item, Func <T, CancellationToken, Task <object> > operation, ILogger logger = null)
        {
            IBusMessage message = new ResponseMessage(item.Id, item.MessageType);

            try
            {
                CancellationTokenSource cts = TokenHelper.GetTokenSource(item.CreateDate, item.TTL, DateTime.UtcNow);

                T value = item.GetBody <T>();
                message.Body = await operation(value, cts.Token);
            }
            catch (Exception ex)
            {
                message.IsError      = true;
                message.ErrorDetails = $"Error : {ex.Message}";
                logger.LogError(ex, $"Error : {ex.Message}");
            }
            return(message);
        }
示例#12
0
        public bool Push(IBusMessage request)
        {
            try
            {
                if (TryCreateChannel())
                {
                    _channel.BasicPublish(exchange: _config.Exchange.Name,
                                          routingKey: _config.Exchange.RoutingKey,
                                          basicProperties: null,
                                          body: request.GetMessage());

                    return(true);
                }
                return(false);
            }
            catch (Exception e)
            {
                _logger?.LogError(e, $"{_connection.ServerInfo}.{typeof(BusProducer).FullName} : {e.Message}");
                return(false);
            }
        }
示例#13
0
 public bool Push(IBusMessage request)
 {
     return(_producer.Push(request));
 }
示例#14
0
 public CacheMessage(IBusMessage contentMessage)
     : base(contentMessage?.GetType().Name)
 {
     Content     = contentMessage?.JsonSerialize();
     ContentType = contentMessage?.GetType().Name;
 }
示例#15
0
        private static void EnqueueInternal(string contextName, IBusMessage message)
        {
            var queues = GetQueue(contextName);

            queues.Enqueue(message);
        }
示例#16
0
 public InternalBusMessage(IPort source, IBusMessage message)
 {
     this.Source  = source;
     this.Message = message;
 }
示例#17
0
 public void Deliver(IBusMessage message, IBusSubscription subscription)
 {
     subscription.Deliver(message);
 }
示例#18
0
 public void Handle(IBusMessage message, Exception exception)
 {
     // 기본 동작은 아무것도 안하는 것이다.
 }
示例#19
0
 public static void Enqueue(string contextName, IBusMessage message)
 {
     EnqueueInternal(contextName, message);
 }