Esempio n. 1
0
        /// <summary>
        /// Register a receiver to receive messages
        /// </summary>
        /// <param name="context">context</param>
        /// <param name="receiver">function to call</param>
        /// <returns>task</returns>
        public async Task RegisterReceiver(IWorkContext context, Func <Message, Task> receiver)
        {
            _messageProcessor.Verify().Assert(x => x == null, "Message process has already been started");

            var request = new RouteRegistrationRequest {
                NodeId = _nodeId
            };

            RouteRegistrationResponse response = await _nameServerClient.Register(context, request);

            response.Verify().IsNotNull($"Registration failed with name server");
            response.InputQueueUri !.Verify().IsNotEmpty("Name server's response did not include input queue uri");

            string connectionString = _getConnectionString(response.InputQueueUri !);
            var    builder          = new ResourcePathBuilder(response.InputQueueUri !);

            _messageProcessor = new MessageQueueReceiveProcessor(connectionString, builder.EntityName);
            await _messageProcessor.Register(context, receiver);
        }