Example #1
0
        /// <summary>
        /// Register Node by NodeId
        /// </summary>
        /// <param name="context">context</param>
        /// <param name="request">request</param>
        /// <returns>response</returns>
        public async Task <RouteRegistrationResponse> Register(IWorkContext context, RouteRegistrationRequest request)
        {
            request.Verify(nameof(request)).IsNotNull();
            request.NodeId.Verify(nameof(request.NodeId)).IsNotNull();

            Uri uri = new ResourcePathBuilder()
                      .SetScheme(ResourceScheme.Queue)
                      .SetServiceBusName("Default")
                      .SetEntityName(request.NodeId !)
                      .Build();

            INodeRegistrationActor registgrationActor = await _actorManager.CreateProxy <INodeRegistrationActor>(request.NodeId !);

            await registgrationActor.Set(context, request.ConvertTo(uri));

            QueueDefinition queueDefinition = new QueueDefinition
            {
                QueueName = request.NodeId,
            };

            IQueueManagementActor queueActor = await _actorManager.CreateProxy <IQueueManagementActor>(request.NodeId !);

            await queueActor.Set(context, queueDefinition);

            return(new RouteRegistrationResponse
            {
                InputQueueUri = uri.ToString(),
            });
        }
Example #2
0
        public CreateQueueState(IQueueManagement queueManagement, QueueDefinition queueDefinition)
        {
            queueManagement.Verify(nameof(queueManagement)).IsNotNull();
            queueDefinition.Verify(nameof(queueDefinition)).IsNotNull();
            queueDefinition.QueueName.Verify(nameof(queueDefinition.QueueName)).IsNotNull();

            _queueDefinition  = queueDefinition;
            _managementClient = queueManagement;
        }
        public async Task <QueueDefinition> CreateQueue(IWorkContext context, QueueDefinition queueDefinition)
        {
            context.Verify(nameof(context)).IsNotNull();
            queueDefinition.Verify(nameof(queueDefinition)).IsNotNull();

            QueueDescription createdDescription = await _managementClient.CreateQueueAsync(queueDefinition.ConvertTo(), context.CancellationToken);

            return(createdDescription.ConvertTo());
        }
Example #4
0
        public QueueRegistration(string serviceHubNamespace, string nodeId, QueueDefinition queueDefinition)
        {
            serviceHubNamespace.Verify(nameof(serviceHubNamespace)).IsNotEmpty();
            nodeId.Verify(nameof(nodeId)).IsNotEmpty();
            queueDefinition.Verify(nameof(queueDefinition)).IsNotNull();

            ServiceHubNamespace = serviceHubNamespace;
            NodeId          = nodeId;
            QueueDefinition = queueDefinition;
        }
Example #5
0
        public async Task Set(IWorkContext context, QueueDefinition queueDefinition)
        {
            context.Telemetry.Verbose(context, $"Set queue {ActorKey.VectorKey}");

            bool state = await new StateManagerBuilder()
                         .Add(new CreateQueueState(_queueManagement, queueDefinition))
                         .Build()
                         .Set(context);

            if (!state)
            {
                context.Telemetry.Error(context, $"Failed to create/set queue {ActorKey.VectorKey}");
                throw new InvalidOperationException($"Failed to create queue {queueDefinition.QueueName}");
            }

            _cache.Set(queueDefinition);
        }
Example #6
0
        public static QueueDescription ConvertTo(this QueueDefinition subject)
        {
            subject.Verify(nameof(subject)).IsNotNull();
            subject.QueueName !.Verify(nameof(subject.QueueName)).IsNotEmpty();

            return(new QueueDescription(subject.QueueName)
            {
                LockDuration = subject.LockDuration,
                RequiresDuplicateDetection = subject.RequiresDuplicateDetection,
                DuplicateDetectionHistoryTimeWindow = subject.DuplicateDetectionHistoryTimeWindow,
                RequiresSession = subject.RequiresSession,
                DefaultMessageTimeToLive = subject.DefaultMessageTimeToLive,
                AutoDeleteOnIdle = subject.AutoDeleteOnIdle,
                EnableDeadLetteringOnMessageExpiration = subject.EnableDeadLetteringOnMessageExpiration,
                MaxDeliveryCount = subject.MaxDeliveryCount,
                EnablePartitioning = subject.EnablePartitioning,
            });
        }
Example #7
0
        public async Task <QueueDefinition?> Get(IWorkContext context)
        {
            if (_cache.TryGetValue(out QueueDefinition model))
            {
                return(model);
            }

            bool exist = await _queueManagement.QueueExists(context, ActorKey.VectorKey);

            if (!exist)
            {
                return(null);
            }

            QueueDefinition subject = await _queueManagement.GetQueue(context, ActorKey.VectorKey);

            _cache.Set(subject);

            return(subject);
        }