繁体   English   中英

Ruby on Rails 中的连接池

[英]Connection Pooling in Ruby on Rails

我必须从另一个微服务(M2)中调用一个微服务(M1)。 由于会有很多对 M1 的 http 请求,我正在使用连接池并且我正在使用持久性 gem,请查看链接https://www.rubydoc.info/gems/persistent_http/2.0。 3 . 我已经将 class 中的两种方法设置为 self-send_get_message 和 self-send_post_message。 因此,每当我必须提出请求时,我都会通过 class 引用直接调用该方法。 这是定义池和使用 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,而且似乎并没有持续增加。

你有什么类型的服务器? 在您的本地机器上,ruby 内部线程锁可能会使变量持续增加,但在多线程环境中,它可以以“随机”方式访问和增加。

顺便说一句:x 是一个可怕的变量名称,对于基本持久的 HTTP 请求架构,使用 WebSockets 或其他类型的连接架构不是更合适吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM