Пул соединений в Ruby на Rails - PullRequest
0 голосов
/ 06 апреля 2020

Мне нужно вызвать микросервис (M1) из другого микросервиса (M2). И поскольку к M1 будет много запросов http, я использую пул соединений и постоянный гем, пожалуйста, проверьте ссылку https://www.rubydoc.info/gems/persistent_http/2.0.3. Я сделал два метода в классе как self-send_get_message и self-send_post_message. Поэтому всякий раз, когда мне нужно сделать запрос, я вызываю метод напрямую по ссылке на класс. Это правильный способ определения пула и использования методов Get и Post.

class HttpClientPool
    @@persistent_http = PersistentHTTP.new(
                         name: 'MyHTTPClient',
                         logger: Rails.logger,
                         pool_size: 10,
                         warn_timeout: 0.25,
                         force_retry: true,
                         url: "http://m1.com/",
                         read_timeout: 2,
                         open_timeout: 1,
                         )
    @@x =  1

def self.send_get_message(path)
        puts "--path = #{path}"
        @@x= @@x+1
        puts "---var is #{@@x}"
        request = Net::HTTP::Get.new(path)
        @@persistent_http.request(request)
 end
 end

Теперь, когда я вызываю HttpClientPool.send_get_message для отправки запроса на получение и печати @@ x, значение должно увеличиваться. Когда я делаю это на локальной машине - кажется, все в порядке. Но когда я развертываюсь на удаленном сервере, значение @@ x получается случайным образом в основном 2,3,4,5,6 и, похоже, не увеличивается постоянно.

1 Ответ

0 голосов
/ 07 апреля 2020

Какой у вас тип сервера? На локальном компьютере ruby внутренняя блокировка потока может привести к постоянному увеличению переменной, но в многопоточных средах к ней можно получить доступ и увеличить ее «случайным» образом.

Кстати: x является ужасным именем для переменной, и, что касается в основном постоянной архитектуры HTTP-запроса, не будет ли более целесообразным использовать WebSockets или другой тип архитектуры подключения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...