예제 #1
0
        protected override async Task SaveInternal(AggregateRoot aggregateRoot)
        {
            var streamName = aggregateRoot.GetId();
            var events     = await Save(aggregateRoot, streamName, null);

            await PublishEndpoint.Publish(events);
        }
        public override Task SendConnectionAsync(string connectionId, string methodName, object[] args, CancellationToken cancellationToken = default)
        {
            if (connectionId == null)
            {
                throw new ArgumentNullException(nameof(connectionId));
            }

            // If the connection is local we can skip sending the message through the bus since we require sticky connections.
            // This also saves serializing and deserializing the message!
            var connection = Connections[connectionId];

            if (connection != null)
            {
                // Connection is local, so we can skip publish
                return(connection.WriteAsync(new InvocationMessage(methodName, args)).AsTask());
            }

            LogContext.Info?.Log("Publishing Connection<THub> message to MassTransit.");
            return(PublishEndpoint.Publish <Connection <THub> >(new
            {
                ConnectionId = connectionId,
                Messages = Protocols.ToProtocolDictionary(methodName, args)
            },
                                                                cancellationToken));
        }
        public override Task SendUsersAsync(IReadOnlyList <string> userIds, string methodName, object[] args, CancellationToken cancellationToken = default)
        {
            if (userIds == null)
            {
                throw new ArgumentNullException(nameof(userIds));
            }

            if (userIds.Count > 0)
            {
                IDictionary <string, byte[]> protocolDictionary = Protocols.ToProtocolDictionary(methodName, args);
                var publishTasks = new List <Task>(userIds.Count);

                foreach (var userId in userIds)
                {
                    publishTasks.Add(PublishEndpoint.Publish <User <THub> >(new
                    {
                        UserId   = userId,
                        Messages = protocolDictionary
                    }, cancellationToken));
                }

                LogContext.Info?.Log("Publishing multiple User<THub> messages to MassTransit.");
                return(Task.WhenAll(publishTasks));
            }

            return(Task.CompletedTask);
        }
        public override Task SendGroupsAsync(IReadOnlyList <string> groupNames, string methodName, object[] args, CancellationToken cancellationToken = default)
        {
            if (groupNames == null)
            {
                throw new ArgumentNullException(nameof(groupNames));
            }

            if (groupNames.Count > 0)
            {
                IDictionary <string, byte[]> protocolDictionary = Protocols.ToProtocolDictionary(methodName, args);
                var publishTasks = new List <Task>(groupNames.Count);

                foreach (var groupName in groupNames)
                {
                    if (!string.IsNullOrEmpty(groupName))
                    {
                        publishTasks.Add(PublishEndpoint.Publish <Group <THub> >(new
                        {
                            GroupName = groupName,
                            Messages  = protocolDictionary
                        }, cancellationToken));
                    }
                }

                LogContext.Info?.Log("Publishing multiple Group<THub> messages to MassTransit.");
                return(Task.WhenAll(publishTasks));
            }

            return(Task.CompletedTask);
        }
        protected override Task SaveInternal(AggregateRoot aggregateRoot)
        {
            var aggregateId       = aggregateRoot.GetId();
            var uncommittedEvents = aggregateRoot.GetUncommittedChanges();
            var eventsToSave      = uncommittedEvents
                                    .Select(e => {
                var doc = LiteDb.Mapper.ToDocument(e.GetType(), e);

                if (doc.ContainsKey("_id"))
                {
                    doc["_EventId"] = doc["_id"];
                    doc.Remove("_id");     // always use autoid to keep order
                }
                doc["_EventType"]   = e.GetType().AssemblyQualifiedName;
                doc["_AggregateId"] = aggregateId;
                return(doc);
            })
                                    .ToList();

            if (!eventsToSave.Any())
            {
                return(Task.CompletedTask);
            }

            var userEventCollection = LiteDb.GetCollection("AllEvents");

            userEventCollection.EnsureIndex("_AggregateId");

            userEventCollection.InsertBulk(eventsToSave);
            PublishEndpoint.Publish(uncommittedEvents);

            aggregateRoot.ClearUncommittedChanges();

            return(Task.CompletedTask);
        }
예제 #6
0
        public override async Task SendConnectionsAsync(IReadOnlyList <string> connectionIds, string methodName, object[] args,
                                                        CancellationToken cancellationToken = default)
        {
            if (connectionIds == null)
            {
                throw new ArgumentNullException(nameof(connectionIds));
            }

            if (connectionIds.Count > 0)
            {
                var protocolDictionary = Protocols.ToProtocolDictionary(methodName, args);
                var publishTasks       = new List <Task>(connectionIds.Count);

                foreach (var connectionId in connectionIds)
                {
                    publishTasks.Add(PublishEndpoint.Publish <Connection <THub> >(new
                    {
                        ConnectionId = connectionId,
                        Messages     = await protocolDictionary.ToMessageData(_repository)
                    },
                                                                                  cancellationToken));
                }

                LogContext.Info?.Log("Publishing multiple Connection<THub> messages to MassTransit.");
                await Task.WhenAll(publishTasks);
            }
        }
 public override Task SendUserAsync(string userId, string methodName, object[] args, CancellationToken cancellationToken = default)
 {
     LogContext.Info?.Log("Publishing User<THub> message to MassTransit.");
     return(PublishEndpoint.Publish <User <THub> >(new
     {
         UserId = userId,
         Messages = Protocols.ToProtocolDictionary(methodName, args)
     }, cancellationToken));
 }
예제 #8
0
 public override async Task SendUserAsync(string userId, string methodName, object[] args, CancellationToken cancellationToken = default)
 {
     LogContext.Info?.Log("Publishing User<THub> message to MassTransit.");
     await PublishEndpoint.Publish <UserMessageData <THub> >(new
     {
         UserId   = userId,
         Messages = await Protocols.ToProtocolDictionary(methodName, args).ToMessageData(_repository)
     }, cancellationToken);
 }
 public override Task SendAllExceptAsync(string methodName, object[] args, IReadOnlyList <string> excludedConnectionIds,
                                         CancellationToken cancellationToken = default)
 {
     LogContext.Info?.Log("Publishing All<THub> message to MassTransit, with exceptions.");
     return(PublishEndpoint.Publish <All <THub> >(
                new
     {
         Messages = Protocols.ToProtocolDictionary(methodName, args),
         ExcludedConnectionIds = excludedConnectionIds.ToArray()
     }, cancellationToken));
 }
        public override Task SendGroupAsync(string groupName, string methodName, object[] args, CancellationToken cancellationToken = default)
        {
            if (groupName == null)
            {
                throw new ArgumentNullException(nameof(groupName));
            }

            LogContext.Info?.Log("Publishing Group<THub> message to MassTransit.");
            return(PublishEndpoint.Publish <Group <THub> >(new
            {
                GroupName = groupName,
                Messages = Protocols.ToProtocolDictionary(methodName, args)
            },
                                                           cancellationToken));
        }
        public async Task <ActionResult> CreateAsync([FromBody] TenantInputDto tenantInput)
        {
            var tenant = Mapper.Map <Tenant>(tenantInput);
            await CustomerLogic.CreateTenantAsync(tenant);

            var errorResult = CheckProblems();

            if (errorResult != null)
            {
                return(errorResult);
            }

            await PublishEndpoint.Publish <ITenantCreatedEvent>(new { Tenant = tenant });

            return(CreatedAtAction(
                       Url.Action(nameof(GetAsync)), new { id = tenant.Id }, tenant));
        }
        public async Task <ActionResult> CreateAsync([FromBody] PersonInputDto personInput)
        {
            var person = Mapper.Map <Person>(personInput);
            await CustomerLogic.CreatePersonAsync(person);

            var errorResult = CheckProblems();

            if (errorResult != null)
            {
                return(errorResult);
            }

            await PublishEndpoint.Publish <IPersonCreatedEvent>(new { Person = person });

            return(CreatedAtAction(
                       Url.Action(nameof(GetAsync)), new { id = person.Id }, person));
        }
예제 #13
0
        public override async Task SendGroupExceptAsync(string groupName, string methodName, object[] args, IReadOnlyList <string> excludedConnectionIds,
                                                        CancellationToken cancellationToken = default)
        {
            if (groupName == null)
            {
                throw new ArgumentNullException(nameof(groupName));
            }

            LogContext.Info?.Log("Publishing Group<THub> message to MassTransit, with exceptions.");
            await PublishEndpoint.Publish <GroupMessageData <THub> >(
                new
            {
                GroupName             = groupName,
                Messages              = await Protocols.ToProtocolDictionary(methodName, args).ToMessageData(_repository),
                ExcludedConnectionIds = excludedConnectionIds.ToArray()
            }, cancellationToken);
        }