ruby-on-rails - Ruby on Rails 中的连接池
问题描述
我必须从另一个微服务(M2)中调用一个微服务(M1)。由于会有很多对 M1 的 http 请求,我正在使用连接池并且我正在使用持久性 gem,请查看链接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,而且似乎并没有持续增加。
解决方案
你有什么类型的服务器?在您的本地机器上,ruby 内部线程锁可能会使变量持续增加,但在多线程环境中,它可以以“随机”方式访问和增加。
顺便说一句:x 是一个可怕的变量名称,对于基本持久的 HTTP 请求架构,使用 WebSockets 或其他类型的连接架构不是更合适吗?
推荐阅读
- c# - SoundEffect.DistanceScale - 如何在 2D 中计算比例?
- c# - WPF ComboBox 项与 XAML 值绑定
- entity-framework - Azure 弹性查询(外部数据源)和实体框架代码优先
- cordova - MediaRecorder - 如何“清除” blob 数据/创建新记录?
- windows - 覆盖文件实际上会覆盖它吗?
- reactjs - Jenkins 在生产服务器上自动构建 Github 存储库
- python - Python - 打印输出时,和+之间的区别
- android - 将选项卡可见性设置为零崩溃应用程序“空引用”
- javascript - 如何将反应状态存储到本地存储中?
- android - 蓝牙东西的服务、线程和异步任务之间哪个是最好的?