Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

【系列】solid queue :初体验 #38

Open
mxchenxiaodong opened this issue Apr 13, 2024 · 0 comments
Open

【系列】solid queue :初体验 #38

mxchenxiaodong opened this issue Apr 13, 2024 · 0 comments

Comments

@mxchenxiaodong
Copy link
Owner

mxchenxiaodong commented Apr 13, 2024

一、契机

前几天,看到一篇文章。Introducing Solid Queue

A new DB-based queuing backend for Active Job that we open-sourced today.

而后又看到了:

image 5

Rails8 的计划中,会内置 Solid Queue,开箱即用,减少依赖。
基于 DB 的方式,虽说不是最快,但已经够快了。

二、初体验

2.1 环境搭建

基于 makefile 写个简单的启动命令:

run_rails_7_demo:
  docker run -it \
  --privileged \
  --name rails_7_demo \
  -p 3010:3000 \
  -v /Users/Work/share_demo/rails_7_demo:/root/rails_7_demo \
  ruby:3.3 \
  /bin/bash

安装 railsgem

gem install rails 

基本版本:

rails -v
#=> Rails 7.1.3.2

ruby -v
#=> ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [x86_64-linux]

bundler -v
# => Bundler version 2.5.6

gem -v
# => 3.5.6

Bundler 是 Ruby 的一个依赖管理器,用于跟踪和安装应用程序所需的 gem 包。
gem 是 Ruby 的包管理器,用于创建、发布、维护和安装 Ruby gem 包。
因此,Bundler 实际上是建立在 gem 之上,提供更好的 gem 管理功能,使得在不同环境中更容易地管理 gem 的依赖关系。

Bundler 不是 Ruby 的内置组件,需要单独安装。通常,可以使用 gem install bundler 命令来安装 Bundler。
gem list bundler 查看当前的版本。

创建 rails 新项目:

rails new rails_7_demo

可以新开控制台,进入同个容器里:

docker exec -it rails_7_demo env LANG=C.UTF-8 bin/bash

根据文档,先配置 solid_queue 的相关东西:

gem "solid_queue"
gem "mission_control-jobs"

2.2 使用

新建一个 job :

class MyJob < ApplicationJob
  def perform(name)
    Rails.logger.info "Processing job for #{name}"
  end
end

将任务推入 solid_queue

MyJob.perform_later('name')
image

启动 solid_queue 消费:

bundle exec rake solid_queue:start
image 2

查询数据:
image 3

或者直接基于页面进行查询:
本地配置:http://0.0.0.0:3010/jobs
image 4

整体体验十分的顺畅。
能够非常快速地搭起后台任务的框架。

三、下一步

3.1 文档

看了 solid_queue 的文档,还是很实用的。
也就借此机会,了解一下基于 DB 的异步框架,是怎么去实现。

3.2 涉及主题

  • 进程与线程的管理
  • 优雅退出的核心逻辑与公司当前的做法
  • 如何适配 activejob
  • 基于数据库的异步任务设计
    • 并发控制
    • 优先级控制
    • 保证最少消费一次
  • 穿插对 Rails 模式的说明
    • Engine
    • Generate 默认文件或者修改配置的方式 (类似:bin/rails generate solid_queue:install)
  • 跟 puma 如何结合起来快速启动
  • 数据库应用之:FOR UPDATE SKIP LOCKED
  • 一个新出的异步框架想让人去使用,如何提供过渡方案?
  • 如何设计一个 callback ?
  • 一个 新功能的诞生 (周期性任务为案例),是如何沟通上线的
  • 一些有意思的 issue 分析:

3.3 大致结构

  • 出一份最简的代码
  • 穿插解释说明一些 概念、Ruby 用法等
  • 一些好的设计理念传递

3.4 整体目标

  • 写一本阅读轻松的 Ruby 小册子。
  • 结合一些 ai 工具来辅助理解,提高效率。— — cody ai
  • 在团队中保持分享。
  • 学习、传递一些好的代码,好的设计理念(可以在实际工作中去应用、知道有更好的实现)。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant