Я пытаюсь подключить Redis с помощью стека Exchage клиента, но столкнулся со странной проблемой. Итак, я создал простое консольное приложение для тестирования.
Тот же код работает, когда я создавал консольное приложение с. net core framework (автономный)
Я не мог понять из root причины. Может кто-нибудь пролить свет на это, пожалуйста.
Что работает
- Пинг из windows контейнера в Redis
- te lnet от windows контейнер к redis
- команды redis-cli от windows контейнер к redis
Консольное приложение, построенное на -. net framework 4.7 .1 - пробная версия клиента 2.1.28, 2.0.600, 1.2.6
код
`
Console.WriteLine("starting.....");
var sr = new System.IO.StringWriter();
try
{
var connectionstring = "redis:6379,resolveDns=True,ConnectTimeout=5000,SyncTimeout=6000,abortConnect=False,allowAdmin=True";
var config = ConfigurationOptions.Parse(connectionstring);
config.CommandMap = CommandMap.Create(new HashSet<string> { "SUBSCRIBE" }, false);
var cache = ConnectionMultiplexer.Connect(config, sr);
Console.WriteLine($"is connected { cache.IsConnected }");
var db =cache.GetDatabase();
//the error occurs here
db.StringSet("foo", "bar");
db.StringGet("foo");
}
catch (Exception)
{
Console.WriteLine(sr.ToString());
throw;
}
Console.ReadLine();
Console.ReadLine();
Console.ReadLine();
return;`
приложение config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.1" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.6.0" newVersion="4.0.6.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.1" newVersion="4.0.1.1" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.IO.Pipelines" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.IO.Compression" publicKeyToken="b77a5c561934e089" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Docker рой с двумя узлами
- linux (работает redis - альпийское изображение)
- Windows 2016 (работает servercore 2016 lts как pnet изображение)
Журнал ошибок
подключен False redis: 6379, syncTimeout = 6000, allowAdmin = True, connectTimeout = 5000, abortConnect = False, resolDns = True, $ SUBSCRIBE =
Использование DNS для разрешения 'redis' ... 'redis' => 10.0.9.221 Подключение 10.0.9.221 : 6379 / Interactive ... BeginConnect: 10.0.9.221:6379 Указано 1 уникальных узла Запрос t ie -break от 10.0.9.221:6379> __Booksleeve_TieBreak ... Разрешение ответа конечных точек 00:00:05 ... Ожидание завершения задачи, IOCP: (Busy = 2, Free = 998, Min = 2, Max = 1000), РАБОЧИЙ: (Занято = 2, Свободно = 2045, Мин. = 2, Макс. = 2047) Подключено Interactive / 10.0.9.221: 6379 Рукопожатие сервера Настройка имени клиента: F295D97412DE Автоматическая настройка ... Отправка критического трассировщика: Интерактивный 10.0.9.221:6379 Запись в Interactive / 10.0.9.221: 6379: очистка исходящего буфера ECHO Начало чтения Не все задачи завершены без ошибок (из ReconfigureAsync # 1602, время ожидания 5000 мс), IOCP: (Busy = 0, Free = 1000, Min = 2 , Макс = 1000), РАБОЧИЙ: (Занято = 1, Свободно = 2046, Мин = 2, Макс = 2047) 10.0.9.221:6379 не отвечает Ожидание прерывателей связей ... Ожидание завершения задачи, IOCP: (Занято = 0, Свободно = 1000, Мин. = 2, Макс. = 1000), РАБОЧИЙ: (Занято = 1, Свободно = 2046, Мин. = 2, Макс. = 2047) Не все задачи выполнены корректно (из NominatePreferredMaster # 1839, время ожидания 50 мс), IOCP: ( Занят = 0, Свободен = 1000, Мин = 2, Макс = 1000), РАБОЧИЙ: (Занят = 1, Свободен = 2046, Мин = 2, Макс = 2047) 10.0.9.221:6379 не удалось назначить (W aitingForActivation) Мастера не обнаружены. 10.0.9.221:6379: Standalone v2.0.0, master; keep-alive: 00:01:00; int: ConnectedEstablishing; суб: н / д; не используется: DidNotRespond 10.0.9.221:6379: int ops = 8, qu = 0, qs = 5, qc = 0, wr = 0, socks = 1; sub ops = 0, qu = 0, qs = 0, qc = 0, wr = 0 Снимок циклического подсчета операций; int: 0 + 8 = 8 (0,80 операций / с; охватывает 10 с); sub: Syn c таймауты: 0; asyn c таймауты: 0; огонь и забудь: 0; последний пульс: -1 с go сброс неудачных соединений для повторной попытки ... сбой соединения: 10.0.9.221:6379 (Interactive, UnableToConnect): UnableToConnect (None, last-recv: 59) 10.0.9.221:6379/Interactive, Сброшено / ReadAsyn c, последнее: ECHO, источник: ResetNonConnected, невыполнено: 5, последнее чтение: 4s a go, последняя запись: 5s a go, keep-alive: 60 с, состояние: ConnectedEstablishing, mgr : 10 из 10 доступно, последнее сердцебиение: никогда, глобально: 5 с go, v: 2.1.28.64774 повторная попытка; осталось попыток: указано 2 ... 1 уникального узла Запрос t ie -break от 10.0.9.221:6379> __Booksleeve_TieBreak ... Разрешение ответа конечным точкам 00:00:05 ... Ожидание завершения задачи, IOCP: (Busy = 0, Свободно = 1000, Мин. = 2, Макс. = 1000), РАБОЧИЙ: (Занято = 1, Свободно = 2046, Мин. = 2, Макс. = 2047) Не все задачи выполнены правильно (из ReconfigureAsync # 1602, время ожидания 5000 мс), IOCP : (Занято = 0, Свободно = 1000, Мин = 2, Макс = 1000), РАБОЧИЙ: (Занято = 1, Свободно = 2046, Мин = 2, Макс = 2047) 10.0.9.221:6379 не ответил Ожидание прерывания связей. .. Ожидание завершения задачи, IOCP: (Занято = 0, Свободно = 1000, Мин = 2, Макс = 1000), РАБОЧИЙ: (Занято = 1, Свободно = 2046, Мин = 2, Макс = 2047) Не все задачи выполнены правильно (от NominatePreferredMaster # 1839, время ожидания 50 мс), IOCP: (Занято = 0, Свободно = 1000, Мин = 2, Макс = 1000), РАБОЧИЙ: (Занято = 1, Свободно = 2046, Мин = 2, Макс = 2047) 10.0.9.221:6379 не удалось назначить (WaitingForActivation) Нет хозяев обнаружено 10.0.9.221:6379: автономная версия 2.0.0, мастер; keep-alive: 00:01:00; int: ConnectedEstablishing; суб: н / д; не используется: DidNotRespond 10.0.9.221:6379: int ops = 16, qu = 0, qs = 5, qc = 0, wr = 0, socks = 2; sub ops = 0, qu = 0, qs = 0, qc = 0, wr = 0 Снимок циклического подсчета операций; int: 0 + 16 = 16 (1,60 операций / с; охватывает 10 с); sub: Syn c таймауты: 0; asyn c таймауты: 0; огонь и забудь: 0; последний пульс: -1 с go сброс неудачных соединений для повторной попытки ... повторная попытка; осталось попыток: задано 1 ... 1 уникальных узлов Запрос t ie -break от 10.0.9.221:6379> __Booksleeve_TieBreak ... Разрешение ответа конечным точкам 00:00:05 ... Ожидание завершения задачи, IOCP: (Busy = 0, Свободно = 1000, Мин. = 2, Макс. = 1000), РАБОЧИЙ: (Занято = 2, Свободно = 2045, Мин. = 2, Макс. = 2047) Не все задачи выполнены корректно (из ReconfigureAsync # 1602, время ожидания 5000 мс), IOCP : (Занято = 0, Свободно = 1000, Мин = 2, Макс = 1000), РАБОЧИЙ: (Занято = 1, Свободно = 2046, Мин = 2, Макс = 2047) 10.0.9.221:6379 не отвечает Ожидание прерывания связей. .. Ожидание завершения задачи, IOCP: (Занято = 0, Свободно = 1000, Мин = 2, Макс = 1000), РАБОЧИЙ: (Занято = 1, Свободно = 2046, Мин = 2, Макс = 2047) Не все задачи выполнены правильно (из NominatePreferredMaster # 1839, время ожидания 50 мс), IOCP: (Занято = 0, Свободно = 1000, Мин = 2, Макс = 1000), РАБОЧИЙ: (Занято = 1, Свободно = 2046, Мин = 2, Макс = 2047) 10.0 .9.221: не удалось назначить 6379 (WaitingForActivation). Мастера не обнаружены. 10.0.9.221:6379: Standalone v2.0.0, master; keep-alive: 00:01:00; int: ConnectedEstablishing; суб: н / д; не используется: DidNotRespond 10.0.9.221:6379: int ops = 24, qu = 0, qs = 5, qc = 0, wr = 0, socks = 3; sub ops = 0, qu = 0, qs = 0, qc = 0, wr = 0 Снимок циклического подсчета операций; int: 0 + 24 = 24 (2,40 операций / с; охват 10 с); sub: Syn c таймауты: 0; asyn c таймауты: 0; огонь и забудь: 0; последний пульс: -1 с go Стартовый пульс ...
Необработанное исключение: StackExchange.Redis.RedisConnectionException: Нет активного / доступного соединения для обслуживания этой операции: SET foo; UnableToConnect (None, last-recv: 59) 10.0.9.221:6379/Interactive, Flushed / ReadAsyn c, последний: ECHO, источник: ResetNonConnected, невыполненный: 5, последний просмотр: 4s a go, last- запись: 5s a go, поддержание активности: 60 с, состояние: ConnectedEstablishing, мгр: 10 из 10 доступно, последнее сердцебиение: никогда, глобально: 5s a go, v: 2.1.28.64774, м c: 1/1/0, доступно: 10 из 10, clientName: F295D97412DE, IOCP: (занято = 0, свободно = 1000, мин = 2, макс = 1000), РАБОЧИЙ: (занято = 0, свободно = 2047, мин = 2, Max = 2047), v: 2.1.28.64774 ---> StackExchange.Redis.RedisConnectionException: UnableToConnect (None, last-recv: 59) 10.0.9.221:6379/Interactive, Flushed / ReadAsyn c, последний: ECHO, происхождение: ResetNonConnected, невыполнено: 5, последнее чтение: 4s a go, последняя запись: 5s a go, keep-alive: 60s, состояние: ConnectedEstablishing, мгр: 10 из 10 доступно, последний пульс : never, global: 5s a go, v: 2.1.28.64774 --- Конец трассировки стека внутренних исключений --- в StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl [T] (Сообщение сообщения, Res ultProcessor 1 processor, ServerEndPoint server)
at StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor
1 процессор, сервер ServerEndPoint) в StackExchange.Redis.RedisDatabase.StringSet (ключ RedisKey, значение RedisValue, Nullable 1 expiry, When when, CommandFlags flags)
at Redis.mk1.Program.Main(String[] args) in C:\Users\karthick.chandran\source\repos\Redis.mk1\Redis.mk1\Program.cs:line 93