コード例 #1
0
        public RawBusMessage Dispatch(RawBusMessage message)
        {
            BusMessage <TData> busMessage = new BusMessage <TData>
            {
                BusId = message.BusId,
                Sent  = message.Sent,
                Data  = (TData)message.Data
            };

            foreach (var header in message.Headers)
            {
                busMessage.Headers.Add(header);
            }

            BusMessage <TReplyData> busReplyMessage = _action(busMessage);

            RawBusMessage replyMessage = new RawBusMessage
            {
                Data = busReplyMessage.Data
            };

            foreach (var header in busReplyMessage.Headers)
            {
                replyMessage.Headers.Add(header);
            }

            return(replyMessage);
        }
コード例 #2
0
 public override void UpdateData(BusMessage <T> input)
 {
     if (_setEnable.Set)
     {
         base.UpdateData(input);
     }
 }
コード例 #3
0
        static void Main(string[] args)
        {
            using (var activator = new BuiltinHandlerActivator())
            {
                Console.WriteLine("Starting App");

                var logger = new LoggerConfiguration()
                             .WriteTo.Console()
                             .CreateLogger();

                // might even make it global default
                Log.Logger = logger;

                activator.Register(() => new BusMessageHandler());
                var msg = new BusMessage();

                Configure.With(activator)
                .Logging(l => l.Serilog(logger))
                .Transport(t => t.UseAmazonSQS("AKIA5KWE5Z3FX65JN3YF", "d2e5ElbBqdz7wIEANYaByl8zbNDv1mKOTSquBYmW", RegionEndpoint.EUWest2, "rebusQueue"))
                .Routing(r => r.TypeBased().Map <BusMessage>("rebusQueue"))

                .Start();

                Console.WriteLine("This is Subscriber 1");
                Console.WriteLine("Press ENTER to quit");
                Console.ReadLine();
                Console.WriteLine("Quitting...");
            }
        }
コード例 #4
0
        public void Send <TData>(BusMessage <TData> busMessage)
        {
            DataContractKey contractKey;
            Type            type = typeof(TData);

            if (!_nameMappings.TryGetValue(type, out contractKey))
            {
                DataContract contract = new DataContract(busMessage.Data);

                _nameMappings.TryAdd(type, contract.Key);

                _contractCollector.AddKnownContract(contract);

                contractKey = contract.Key;
            }

            using (Message message = Message.CreateMessage(_messageVersion, MessagingConstants.MessageAction.Regular, busMessage.Data))
            {
                SetBusHeaders(message, contractKey);

                SetUserHeaders(busMessage, message);

                _outputChannel.Send(message);
            }
        }
コード例 #5
0
        public RouteResponse CC(ControlCommand command)
        {
            //serialize message
            string serialized = JsonConvert.SerializeObject(command, new JsonSerializerSettings()
            {
                TypeNameHandling = TypeNameHandling.All
            });
            JObject asJO = JObject.Parse(serialized);



            //create peristed message
            BusMessage msg = new BusMessage()
            {
                PayLoad = serialized, MessageType = asJO["$type"].ToString()
            };


            RouteResponse toReturn = new RouteResponse()
            {
                Status = false
            };

            try {
                toReturn = Bus.ReceiveMessage(msg);
            } catch {
                throw;
            }

            return(toReturn);
        }
コード例 #6
0
        public async Task Handle(BusMessage message)
        {
            using (var scope = _Provider.CreateScope())
            {
                try
                {
                    var dataBody = Encoding.UTF8.GetString(message.Data);
                    _Logger.LogInformation(dataBody);

                    var command = message.ConvertBusMessageToCommand();

                    await _MediatR.Send(command);
                }
                catch (DomainException de)
                {
                    _Logger.LogError(de, de.Message);
                }
                catch (ValidationException ve)
                {
                    _Logger.LogError(ve, ve.Message);
                }
                catch (CommandException ce)
                {
                    _Logger.LogError(ce, ce.Message);
                }
                catch (Exception ex)
                {
                    _Logger.LogError(ex, ex.Message);
                }
            }
        }
コード例 #7
0
        private void ConstructHeaders(BusMessage message, IBasicProperties properties)
        {
            foreach (KeyValuePair <string, object> header in properties.Headers)
            {
                object o = header.Value;

                switch (header.Key)
                {
                case XDeadHeader.WellknownName:
                    message.Headers.Add(BuildXDeadHeader(o));
                    break;

                case XReceivedFromHeader.WellknownName:
                    message.Headers.Add(BuildXReceivedFromHeader(o));
                    break;

                case RejectedHeader.WellknownName:
                    message.Headers.Add(new RejectedHeader());
                    break;

                case ExceptionHeader.WellknownName:
                    message.Headers.Add(new ExceptionHeader
                    {
                        Message = BuildHeaderValue(o)
                    });
                    break;

                default:
                    message.Headers.Add(new BusHeader(header.Key, BuildHeaderValue(o)));
                    break;
                }
            }
        }
コード例 #8
0
        public void MessageProcessFailedOnce_RejectMessageUsingExceptionFilter_CheckMessageDeliveredToDeadLetterQ()
        {
            using (RabbitMQBus entityA = new RabbitMQBus(), entityB = new RabbitMQBus(), entityC = new RabbitMQBus(c => c.UseConnectionString("amqp://localhost/amq.direct")))
            {
                TransactionalPerson message = new TransactionalPerson
                {
                    Id = 5
                };

                ManualResetEvent ev = new ManualResetEvent(false);

                int counter = 0;

                BusMessage <TransactionalPerson> actual = null;

                using (ISubscriber subscriberA = entityA.CreateSubscriber(c => c.UseDurableQueue(QueueName).UseTransactionalDelivery(new MyFilter())))
                {
                    subscriberA.Subscribe((Action <TransactionalPerson>)(d =>
                    {
                        counter++;

                        throw new Exception();
                    }));

                    subscriberA.Open();

                    using (ISubscriber deadLetterSubscriber = entityC.CreateSubscriber(c => c.UseDurableQueue(DeadLetterQueueName)))
                    {
                        deadLetterSubscriber.Subscribe <TransactionalPerson>(m =>
                        {
                            actual = m;

                            ev.Set();
                        });

                        deadLetterSubscriber.Open();

                        const int expected = 2;

                        using (IPublisher publisher = entityB.CreatePublisher())
                        {
                            publisher.Send(message);
                        }

                        bool waitOne = ev.WaitOne(TimeSpan.FromSeconds(50));

                        counter.Should().BeGreaterOrEqualTo(expected);
                        waitOne.Should().BeTrue();
                        actual.Data.ShouldBeEquivalentTo(message);

                        XDeadHeader xDeadHeader = actual.Headers.OfType <XDeadHeader>().First();

                        xDeadHeader.Exchange.Should().Be("amq.headers");
                        xDeadHeader.Reason.Should().Be("rejected");
                        xDeadHeader.Queue.Should().Be(QueueName);
                    }
                }
            }
        }
コード例 #9
0
        public BusHandlerResponse HandleMessage(BusContext busContext, BusMessage busMessage)
        {
            var x = 10;

            //WriteShareClass shareClass = busMessage.Payload as WriteShareClass;
            log.Info($"Handling: order for bus Event");
            return(new BusHandlerResponse());
        }
コード例 #10
0
 public async Task HandleMessage(BusMessage message)
 {
     using (var scope = _ServiceProvider.CreateScope())
     {
         var request = message.ConvertBusMessageToMediatr();
         await scope.ServiceProvider.GetRequiredService <IMediator>().Send(request);
     }
 }
コード例 #11
0
        public async Task <bool> Handle(EnrollmentRequestCommand request, CancellationToken cancellationToken)
        {
            var message = new BusMessage("CourseEnrollment", request);

            await _Publisher.Publish(message, "course.queue");

            return(true);
        }
コード例 #12
0
        public void HandleCreateTruckOwnerUser(BusMessage message)
        {
            var truckOwnerUserInfo = JsonConvert.DeserializeObject <EstateManagerSetUpUser>(message.Data);

            if (truckOwnerUserInfo.UserType == (int)UserTypes.Estate_Manager)
            {
                _truckOwnerUserService.CreateTruckOwnerUser(truckOwnerUserInfo);
            }
        }
コード例 #13
0
 private void Action(ILifetimeScope arg1, IAfEvent arg2, BusMessage sourceMessage)
 {
     if (arg2 is SmallCacheExpiredEvent evt &&
         sourceMessage.SenderId != _afEventHub.AfEventHubId)
     {
         _logger.LogInformation("cache expired and remove it");
         _smallCache.Remove(evt.CacheKey);
     }
 }
コード例 #14
0
        public void HandleCreateMarketerUser(BusMessage message)
        {
            var landlordUserInfo = JsonConvert.DeserializeObject <LandLordSetUpUser>(message.Data);

            if (landlordUserInfo.UserType == (int)UserTypes.Estate_Manager)
            {
                _marketerUserService.CreateMarketerUser(landlordUserInfo);
            }
        }
コード例 #15
0
        private void OnMessage(BusMessage <ScaleoutMessage> message)
        {
            string sIndex = message.Headers.OfType <BusHeader>().Where(h => h.Name == StreamIndexHeader).Select(h => h.Value).FirstOrDefault();

            int streamIndex;

            Int32.TryParse(sIndex, out streamIndex);

            OnReceived(streamIndex, (ulong)Interlocked.Increment(ref _payloadId), message.Data);
        }
コード例 #16
0
 private static void SetUserHeaders <TData>(BusMessage <TData> busMessage, Message message)
 {
     foreach (BusHeader busHeader in busMessage.Headers)
     {
         message.Headers.Add(MessageHeader.CreateHeader(busHeader.Name,
                                                        MessagingConstants.Namespace.MessageBus,
                                                        busHeader.Value, false,
                                                        MessagingConstants.Actor.User));
     }
 }
コード例 #17
0
 public void Publish(BusMessage message)
 {
     var exchange = Exchange.DeclareTopic(_exName);
     using (var channel = _bus.OpenPublishChannel())
     {
         channel.Publish<BusMessage>(exchange, "", new Message<BusMessage>(message));
         _log.InfoFormat("Message for command id {0} published on exchange {1}", message.MessageId, _exName);
         
        
     }
 }
コード例 #18
0
 public void WrapAndPublish(ICommand command, CommandType commandType)
 {
     var message = new BusMessage
     {
         CommandType = commandType.ToString(),
         MessageId = command.CommandId,
         BodyJson = JsonConvert.SerializeObject(command, new IsoDateTimeConverter()),
         SendDateTime = "" //use default
     };
     Publish(message);
 }
コード例 #19
0
        public TData Receive <TData>()
        {
            BusMessage <TData> message = ReceiveBusMessage <TData>();

            if (message == null)
            {
                return(default(TData));
            }

            return(message.Data);
        }
コード例 #20
0
        public void Send(BusMessage message)
        {
            var endpoint = this.endpointInstanceProvider.Get(message.TopicName);

            if (endpoint == null)
            {
                throw new Exception($"Failed to resolve NServiceBus endpoint mapping to send topic {message.TopicName}");
            }

            endpoint.Instance.Send(endpoint.Name, message);
        }
コード例 #21
0
        public Task <TReplyData> Send <TData, TReplyData>(TData data, TimeSpan timeOut, bool persistant)
        {
            return(SendAndCreateTask(new BusMessage <TData> {
                Data = data
            }, timeOut, m =>
            {
                BusMessage <TReplyData> replyMessage = CreateBusMessage <TReplyData>(m);

                return replyMessage.Data;
            }, persistant));
        }
コード例 #22
0
ファイル: SendHelper.cs プロジェクト: ybqwerty/MessageBus
        private void Send(byte[] bytes, string contentType, string name, string ns, BusMessage busMessage, SendParams sendParams)
        {
            busMessage.Sent  = DateTime.Now;
            busMessage.BusId = sendParams.BusId;

            BasicProperties basicProperties = new BasicProperties
            {
                AppId       = busMessage.BusId,
                Timestamp   = busMessage.Sent.ToAmqpTimestamp(),
                ContentType = contentType,
                Headers     = new Dictionary <string, object>()
            };

            if (!string.IsNullOrEmpty(name))
            {
                basicProperties.Type = name;

                basicProperties.Headers.Add(MessagingConstants.HeaderNames.Name, name);
            }

            if (!string.IsNullOrEmpty(ns))
            {
                basicProperties.Headers.Add(MessagingConstants.HeaderNames.NameSpace, ns);
            }

            foreach (BusHeaderBase header in busMessage.Headers)
            {
                basicProperties.Headers.Add(header.Name, header.GetValue());
            }

            if (sendParams.PersistentDelivery)
            {
                basicProperties.Persistent = true;
            }

            if (!string.IsNullOrEmpty(sendParams.ReplyTo))
            {
                basicProperties.ReplyTo = sendParams.ReplyTo;
            }

            if (!string.IsNullOrEmpty(sendParams.CorrelationId))
            {
                basicProperties.CorrelationId = sendParams.CorrelationId;
            }

            if (sendParams.Priority.HasValue)
            {
                basicProperties.Priority = sendParams.Priority.Value;
            }

            sendParams.Model.BasicPublish(sendParams.Exchange, sendParams.RoutingKey, sendParams.MandatoryDelivery, basicProperties, bytes);
        }
コード例 #23
0
        public BusMessage <T> ConstructMessage <T>(DataContractKey dataContractKey, IBasicProperties properties, T data)
        {
            BusMessage <T> message = new BusMessage <T>
            {
                Data  = data,
                BusId = properties.AppId,
                Sent  = properties.Timestamp.GetDateTime()
            };

            ConstructHeaders(message, properties);

            return(message);
        }
コード例 #24
0
        public bool SaveMessage <t>(BusMessage <t> message)
        {
            bool result = false;
            IMongoCollection <BusMessage <t> > collection = GetMongoCollection <t>();

            if (isValidCollection(collection))
            {
                collection.InsertOneAsync(message).Wait();

                result = true;
            }
            return(result);
        }
コード例 #25
0
        private void ConstructHeaders(BusMessage message, IBasicProperties properties)
        {
            foreach (KeyValuePair <string, object> header in properties.Headers)
            {
                object o = header.Value;

                if (header.Key == XDeadHeader.WellknownName)
                {
                    List <object> list = (List <object>)o;

                    Dictionary <string, object> values = (Dictionary <string, object>)list[0];

                    byte[]        reason      = (byte[])values["reason"];
                    byte[]        queue       = (byte[])values["queue"];
                    AmqpTimestamp time        = (AmqpTimestamp)values["time"];
                    byte[]        exchange    = (byte[])values["exchange"];
                    List <object> routingKeys = (List <object>)values["routing-keys"];

                    XDeadHeader xDeadHeader = new XDeadHeader
                    {
                        Reason   = Encoding.ASCII.GetString(reason),
                        Queue    = Encoding.ASCII.GetString(queue),
                        Exchange = Encoding.ASCII.GetString(exchange),
                        Time     = time.GetDateTime()
                    };

                    foreach (var routingKey in routingKeys)
                    {
                        xDeadHeader.RoutingKeys.Add(Encoding.ASCII.GetString((byte[])routingKey));
                    }

                    message.Headers.Add(xDeadHeader);
                }
                else if (header.Key == RejectedHeader.WellknownName)
                {
                    message.Headers.Add(new RejectedHeader());
                }
                else if (header.Key == ExceptionHeader.WellknownName)
                {
                    message.Headers.Add(new ExceptionHeader
                    {
                        Message = Encoding.ASCII.GetString((byte[])o)
                    });
                }
                else
                {
                    message.Headers.Add(new BusHeader(header.Key, Encoding.ASCII.GetString((byte[])o)));
                }
            }
        }
コード例 #26
0
ファイル: Publisher.cs プロジェクト: ronybot/MessageBus
        public void Send <TData>(BusMessage <TData> busMessage)
        {
            RawBusMessage rawBusMessage = new RawBusMessage
            {
                Data = busMessage.Data
            };

            foreach (BusHeader header in busMessage.Headers)
            {
                rawBusMessage.Headers.Add(header);
            }

            Send(rawBusMessage);
        }
コード例 #27
0
        public BusHandlerResponse HandleMessage(BusContext busContext, BusMessage busMessage)
        {
            var x = 10;

            //WriteShareClass shareClass = busMessage.Payload as WriteShareClass;
            busContext.Bus.Publish(
                "ShareClassCreated",
                new BusEvent
            {
                TopicName = "ShareClassCreated",
                Payload   = "Test"
            });
            return(new BusHandlerResponse());
        }
コード例 #28
0
        private RawBusMessage CreateRawMessage <TData>(BusMessage <TData> busMessage)
        {
            RawBusMessage rawBusMessage = new RawBusMessage
            {
                Data = busMessage.Data
            };

            foreach (var header in busMessage.Headers.Concat(_configuration.Headers))
            {
                rawBusMessage.Headers.Add(header);
            }

            return(rawBusMessage);
        }
コード例 #29
0
        private void FireEvent(IAsyncCursor <BusMessage <t> > cursor, StorageManager storageManager)
        {
            List <BusMessage <t> > messages = cursor.Current.ToList();

            FilterMessagesForTTL(messages);
            BusMessage <t> lastMessage = messages.LastOrDefault();

            if (lastMessage.IsNotNull())
            {
                ProcessedMessageTrack track = DBUtil.ToMessageTrack(lastMessage._id, lastMessage.CreationTime, lastMessage.Message.GetType(), this.listenerApplication);
                storageManager.SaveProcessedMessageTrack(track);
                FireEvent(messages.Select(x => x.Message).ToList());
            }
        }
コード例 #30
0
        public void Bus_BusMessage_HeadersAndPropertiesUsage()
        {
            const string busId = "Bus";

            using (MessageBus.Core.RabbitMQBus bus = new MessageBus.Core.RabbitMQBus(c => c.SetBusId(busId)))
            {
                BusMessage <Person> message = new BusMessage <Person>
                {
                    Data = new Person {
                        Id = 5
                    }
                };
                message.Headers.Add(new BusHeader
                {
                    Name = "Version", Value = "Ver1"
                });

                BusMessage <Person> received = null;

                ManualResetEvent ev = new ManualResetEvent(false);

                DateTime sent;
                using (ISubscriber subscriber = bus.CreateSubscriber(c => c.SetReceiveSelfPublish()))
                {
                    subscriber.Subscribe((Action <BusMessage <Person> >)(m =>
                    {
                        received = m;
                        ev.Set();
                    }));

                    subscriber.Open();

                    using (IPublisher publisher = bus.CreatePublisher())
                    {
                        sent = DateTime.Now;
                        publisher.Send(message);
                    }

                    bool wait = ev.WaitOne(TimeSpan.FromSeconds(5));

                    wait.Should().BeTrue();
                }

                received.ShouldBeEquivalentTo(message, options => options.Excluding(m => m.BusId).Excluding(m => m.Sent));

                received.BusId.Should().Be(busId);
                received.Sent.Should().BeCloseTo(sent, 1000);
            }
        }
コード例 #31
0
        public void Send(BusMessage message)
        {
            var handlers = this.busHandlers.FindAll(bh => bh.CanHandleMessage(message));

            var busContext = new BusContext(this);

            try
            {
                Task.WaitAll(handlers.Select(busHandler => Task.Run(() => busHandler.HandleMessage(busContext, message))).Cast <Task>().ToArray());
            }
            catch (AggregateException ae)
            {
                throw ae.Flatten();
            }
        }
コード例 #32
0
ファイル: ManageMessage.cs プロジェクト: sirjqr/AES_SOBS_PS
        public async Task SendResponseMessagesAsync(BusMessage messageInfo)
        {
            IMessageSender messageSender;

            messageSender = new MessageSender(appOptions.BusConnectionString, messageInfo.TopicName);
            var messagesToSend = new List <Message>();
            var message        = new Message(messageInfo.MessageBody);

            message.SessionId = messageInfo.TokenID;
            message.UserProperties.Add(appOptions.RuleName, messageInfo.SubscriptionName);
            messagesToSend.Add(message);
            await messageSender.SendAsync(messagesToSend);

            await messageSender.CloseAsync();
        }
コード例 #33
0
 public void Handle(BusMessage busMessage)
 {
     DateTime dtSent = DateTime.Parse(busMessage.SendDateTime);
     SystemCommandType systemCommandType = GetSystemCommandType(busMessage.CommandType);
   switch(systemCommandType)
   {
       case SystemCommandType.AddRetriesToQ:
           if (DateTime.Now.Subtract(dtSent) < new TimeSpan(0, 0, 10, 0)) //only process message sent in the last 10 mintuts
               _qAddRetryCommandHandler.Execute();
           break;
       case SystemCommandType.ReRouteDocument:
               var command = JsonConvert.DeserializeObject<ReRouteDocumentCommand>(busMessage.BodyJson);
               _reRouteDocumentCommandHandler.Execute(command);
           break;
           
           
   }
     
 }
コード例 #34
0
        public void Handle(BusMessage message)
        {
            Stopwatch handlerTimer = new Stopwatch();
            handlerTimer.Start();
            _logger.InfoFormat(" Subscriber  Processing command : {0} with {1} ", message.CommandType, message.BodyJson);
            CommandProcessingStatus currentStatus = CommandProcessingStatus.SubscriberProcessBegin;
            //ICommand command = _commandDeserialize.DeserializeCommand(message.CommandType, message.BodyJson);
            ICommand command = JsonConvert.DeserializeObject<DocumentCommand>(message.BodyJson);
            try
            {
                
                //run guard to confirm if message can be run
                _subscriberCommandExecutionGuard.CanExecute(command);
                //record to command audit that message has arrived
               
                Audit("CommandProcessing", string.Format("Handle : {0} Command {1} of Type {2}", currentStatus.ToString(), command.CommandId.ToString(), message.CommandType), currentStatus.ToString(), command.CommandGeneratedByCostCentreId);
                if (!string.IsNullOrWhiteSpace(message.SendDateTime))
                {
                    DateTime _sendDateTime = _commandDeserialize.DeserializeSendDateTime(message.SendDateTime);
                    command.SendDateTime = _sendDateTime;
                }
                _logger.InfoFormat("Handle Command {4} : {0} for Document id {1} from cost centre {2} : {3}", command.CommandId, command.DocumentId, command.CommandGeneratedByCostCentreId, command.CommandGeneratedByCostCentreApplicationId, command.GetType().ToString());
                CommandType commandType = GetCommandType(message.CommandType);
                command = _documentHelper.GetExternalRef(command);
                CommandRouteOnRequestDTO commandRouteItems = _commandRoutingOnRequestResolver.GetCommand(command, commandType);

                if (commandRouteItems != null)
                {
                    
                    _runCommandOnRequestInHostedEnvironment.RunCommandInHostedenvironment(commandRouteItems.RouteOnRequest, command);

                    _commandRoutingOnRequestRepository.Add(commandRouteItems.RouteOnRequest);
                    var ccAdded = new List<Guid>();
                    foreach (var rc in commandRouteItems.CommandRouteCentres.Distinct())
                    {
                        if (ccAdded.Any(n => n == rc.CostCentreId))
                            continue;
                        ccAdded.Add(rc.CostCentreId);
                        rc.CommandRouteOnRequestId = commandRouteItems.RouteOnRequest.Id;
                        rc.DateAdded = DateTime.Now;
                        _commandRoutingOnRequestRepository.AddRoutingCentre(rc);
                    }
                    RouteExternalRef(commandRouteItems,command);
                   
                }
                currentStatus = CommandProcessingStatus.Complete;
              // _busPublisher.SignalComplete(command);

            }
            catch (MarkForRetryException ex)
            {
                _logger.Error("Markfor retry", ex);
                currentStatus = CommandProcessingStatus.MarkedForRetry;
            }
            catch (CommandAlreadyExecutedException ex)
            {
                _logger.Error("Command already executed", ex);
                currentStatus = CommandProcessingStatus.Failed;
            }
            catch (Exception ex)
            {
                //record to command audit that message failed to be processed
                _logger.Error("Command processing error ", ex);
                currentStatus = CommandProcessingStatus.MarkedForRetry;

                //throw ex;
            }

            Audit("CommandProcessing", string.Format("Handle : {0} Command {1} of Type {2}", currentStatus.ToString(), command.CommandId.ToString(), message.CommandType), currentStatus.ToString(), command.CommandGeneratedByCostCentreId);
            _commandProcessingAuditRepository.SetCommandStatus(message.MessageId, currentStatus);
            //record that message was processed successfully
            handlerTimer.Stop();
            _logger.InfoFormat("Total Request Time(m/s) {0} for command {1} ",handlerTimer.Elapsed.TotalMilliseconds, message.CommandType);
        }
コード例 #35
0
        public void Publish(BusMessage message)
        {
           // _busSubscriber.Handle(message);
            throw new NotImplementedException("StubbedBusPublisher");

        }