Пример #1
0
        public async Task RunAsync(
            [ServiceBusTrigger("%QueueListenerName%", Connection = "ServiceBusConnectionString", IsSessionsEnabled = true)]
            byte[] message,
            FunctionContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            var logger = context.GetLogger("ReplyToRequestFromPostOffice");

            logger.LogInformation($"C# ServiceBus queue trigger function processesing message: {message}");

            try
            {
                var bundleRequestDto             = _requestBundleParser.Parse(message);
                var requestDataBundleResponseDto = await CreateResponseAsync(bundleRequestDto).ConfigureAwait(false);

                await _responseSender.SendAsync(requestDataBundleResponseDto).ConfigureAwait(false);
            }
            catch (MessageHubStorageException e)
            {
                logger.LogError("Error Processing message: {0}", e);
                throw;
            }
        }
Пример #2
0
        public async Task <DataBundleResponseDto?> SendAsync(
            DataBundleRequestDto dataBundleRequestDto,
            DomainOrigin domainOrigin)
        {
            ArgumentNullException.ThrowIfNull(dataBundleRequestDto, nameof(dataBundleRequestDto));

            var bytes = _requestBundleParser.Parse(dataBundleRequestDto);

            var sessionId = dataBundleRequestDto.RequestId.ToString();

            var replyQueue  = GetReplyQueueName(domainOrigin);
            var targetQueue = GetQueueName(domainOrigin);

            var serviceBusMessage = new ServiceBusMessage(bytes)
            {
                SessionId        = sessionId,
                ReplyToSessionId = sessionId,
                ReplyTo          = replyQueue,
                TimeToLive       = _peekRequestConfig.PeekTimeout ?? _defaultTimeout
            }.AddRequestDataBundleIntegrationEvents(dataBundleRequestDto.IdempotencyId);

            var serviceBusClient = _messageBusFactory.GetSenderClient(targetQueue);

            await serviceBusClient
            .PublishMessageAsync <ServiceBusMessage>(serviceBusMessage)
            .ConfigureAwait(false);

            await using var receiverMessageBus = await _messageBusFactory
                                                 .GetSessionReceiverClientAsync(replyQueue, sessionId)
                                                 .ConfigureAwait(false);

            var response = await receiverMessageBus
                           .ReceiveMessageAsync <ServiceBusMessage>(_peekRequestConfig.PeekTimeout ?? _defaultTimeout)
                           .ConfigureAwait(false);

            if (response == null)
            {
                return(null);
            }

            return(_responseBundleParser.Parse(response.Body.ToArray()));
        }