コード例 #1
0
 public async Task <GetConcurrentWithoutHostNotPublishedIdsResponse> GetConcurrentWithoutHostNotPublishedIdsAsync(GetConcurrentWithoutHostNotPublishedIdsRequest request,
                                                                                                                  [CallerMemberName] string callerMemberName = null)
 => await ExecutePostAsync <GetConcurrentWithoutHostNotPublishedIdsResponse, GetConcurrentWithoutHostNotPublishedIdsRequest>(
     path : "/api/message/get-concurrent-without-host-not-published-ids",
     request : request,
     callerMemberName : callerMemberName);
コード例 #2
0
        public async Task <GetConcurrentWithoutHostNotPublishedIdsResponse> GetConcurrentWithoutHostNotPublishedIdsAsync([FromBody] GetConcurrentWithoutHostNotPublishedIdsRequest request)
        {
            request.RequiredNotNull(nameof(request));
            request.RequiredArgumentNotNull(() => request.ApplicationName);
            request.RequiredArgumnetNotNullAndNotDefaultValue <GetConcurrentWithoutHostNotPublishedIdsRequest, int>(() => request.RowsCount);

            var concurrentSelectDelayInMilliseconds = request.ConcurrentSelectDelayInMilliseconds ?? MessageGlossary.DefaultConcurrentSelectLockDelayInMilliseconds;
            var concurrentSelectLockEndDateTime     = _dateTimeService.GetDateTimeNow().AddMilliseconds(-concurrentSelectDelayInMilliseconds);

            var createdDelayInMilliseconds = request.CreatedDelayInMilliseconds ?? MessageGlossary.DefaultCreatedDelayInMilliseconds;
            var createdDelayEndDateTime    = _dateTimeService.GetDateTimeNow().AddMilliseconds(-createdDelayInMilliseconds);

            var rowsWithConcurrentRowsIds = await _messageRepository.GetNotPublishedIdsAsync(
                createdDelayEndDateTime : createdDelayEndDateTime,
                topRowsCount : request.RowsCount,
                applicationName : request.ApplicationName,
                host : null,
                messageTypeFullName : request.MessageTypeFullName,
                concurrentSelectLockEndDateTime : concurrentSelectLockEndDateTime);

            var res = new List <Guid>();

            foreach (var iConcurrentRowId in rowsWithConcurrentRowsIds)
            {
                var dateNow = _dateTimeService.GetDateTimeNow();

                var concurrentMessage = await _messageRepository.GetByIdAsync(iConcurrentRowId);

                if (concurrentMessage.ConcurrentSelectLockDateTime.HasValue == true)
                {
                    var concurrentSelectLockDateTimePlusDelay = concurrentMessage.ConcurrentSelectLockDateTime.Value.AddMilliseconds(concurrentSelectDelayInMilliseconds);

                    if (concurrentSelectLockDateTimePlusDelay > dateNow)
                    {
                        continue;
                    }
                }

                concurrentMessage.ConcurrentSelectLockDateTime = dateNow;
                try
                {
                    await _messageRepository.UpdateAsync(concurrentMessage);

                    res.Add(iConcurrentRowId);
                }
                catch (Exception exc)
                {
                    continue;
                }
            }

            return(new GetConcurrentWithoutHostNotPublishedIdsResponse {
                Ids = res
            });
        }