Пример #1
0
        public async Task <string> GetMenu(int menuId)
        {
            PubSubRequestMessage req = new PubSubRequestMessage()
            {
                Value = menuId, ResponseChannel = _responseChannel
            };

            TaskCompletionSource <string> tcs = new TaskCompletionSource <string>();

            _messageCallbacks.TryAdd(req.CorrelationId, response => tcs.SetResult(response.ResponseValue));

            long numberOfClients = await _subscriber.PublishAsync(_requestChannel, JsonConvert.SerializeObject(req));

            return(await tcs.Task);
        }
        private void RequestCallback(RedisChannel chl, RedisValue msg)
        {
            PubSubRequestMessage requestMessage = JsonConvert.DeserializeObject <PubSubRequestMessage>(msg);

            Thread.Sleep(100 + new Random().Next(500, 2000));

            PubSubResponseMessage responseMessage = new PubSubResponseMessage()
            {
                CorrelationId = requestMessage.CorrelationId,
                ResponseValue = $"Hello {requestMessage.Value}"
            };

            string message = JsonConvert.SerializeObject(responseMessage);

            _subscriber.Publish(requestMessage.ResponseChannel, message);
        }