首页 > 其他分享 >oban简单学习试用

oban简单学习试用

时间:2024-01-09 10:37:50浏览次数:31  
标签:do oban Oban 学习 mix 试用 ecto First

以前简单介绍过oban 一个强大的elixir任务框架,支持不少类型模式的job 处理,以下是一个简单的试用

环境准备

数据库使用了pg,oban 使用了ecto 这个强大的orm 框架,添加了oban 依赖之后就可以使用包含的mix ecto 命令进行
表的创建了,数据库使用docker-compose 运行

  • docker-compose.yaml

 


services:
  db:
    image: postgres:16.0
    ports:
      - "5432:5432"
    environment:
    - POSTGRES_PASSWORD=dalongdemo
初始化oban
创建supervisor mix 项目
 
mix new first --sup
添加依赖(包含了pg 以及oban)mix.exs

defp deps do
    [
        {:postgrex, "~> 0.17.4"},
        {:oban, "~> 2.16"}
    ]
end
创建ecto repo

mix ecto.gen.repo -r First.Repo
配置ecto

import Config
config :first,ecto_repos: [First.Repo]
 
config :first, First.Repo,
  database: "postgres",
  username: "postgres",
  password: "dalongdemo",
  hostname: "localhost"
ecto 创建oban 迁移任务

mix ecto.gen.migration add_oban_jobs_table
配置生成的迁移

defmodule First.Repo.Migrations.AddObanJobsTable do
  use Ecto.Migration
 
  def up do
    Oban.Migration.up(version: 11)
  end
 
  # We specify `version: 1` in `down`, ensuring that we'll roll all the way back down if
  # necessary, regardless of which version we've migrated `up` to.
  def down do
    Oban.Migration.down(version: 1)
  end
end
db:

创建数据库表

mix ecto.migrate

效果

oban简单学习试用_docker

oban 运行配置
mix.exs

 

 
config :first, Oban,
  repo: First.Repo,
  plugins: [Oban.Plugins.Pruner],
  queues: [default: 10]
Supervisor 配置
lib/first/application.ex

 
@impl true
def start(_type, _args) do
    children = [
      First.Repo,
      {Oban, Application.fetch_env!(:first, Oban)}
    ]
    opts = [strategy: :one_for_one, name: First.Supervisor]
    Supervisor.start_link(children, opts)
end
repo: First.Repo,

检查配置,oban 提供了检查配置的方法,可以方便查看信息

iex -S mix
Oban.config()

效果

oban简单学习试用_html_02

开发job任务

  • 简单任务

 

defmodule Job.Logjob do
  use Oban.Worker, queue: :logjob
  @impl Oban.Worker
  def perform(%Oban.Job{args: args}) do
    IO.inspect(args)
    :ok
  end
end
执行任务
job = Job.Logjob.new(%{id: 1, params: []})
Oban.insert(job)
use Oban.Worker, queue: :logjob

效果

oban简单学习试用_html_03

启动队列(还是上边的执行shell 中)

 

Oban.start_queue(queue: :logjob, limit: 4)

效果

oban简单学习试用_github_04

 

oban简单学习试用_docker_05

说明

oban 在elixir 的周边项目中使用还是很多的,值得学习下

参考资料

https://hexdocs.pm/oban/installation.html
https://getoban.pro/
https://github.com/sorentwo/oban
https://hexdocs.pm/oban/preparing_for_production.html
https://hexdocs.pm/oban/Oban.Config.html?ref=blixt-dev
https://github.com/elixir-ecto/ecto
https://hexdocs.pm/ecto/getting-started.html

标签:do,oban,Oban,学习,mix,试用,ecto,First
From: https://blog.51cto.com/rongfengliang/9157092

相关文章

  • 2024年1月重庆/武汉/深圳DAMA-CDGA/CDGP数据治理认证备考学习
    DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业竞争能力。DAMA是数据管理方面的认证,帮助数据从业者提升......
  • 一分钟带你了解深度学习算法
    深度学习是一种受到生物学启发的机器学习方法,其目标是通过构建多层神经网络来模拟人脑的工作原理。它在过去几十年来取得了巨大的进展,并在图像识别、语音识别、自然语言处理等领域取得了突破性的成果。深度学习的核心思想是模仿人脑的神经网络。人脑中的神经元通过连接起来形成庞大......
  • Vue学习计划-Vue3--初识Vue3,vite创建Vue3项目
    1.Vue3简介性能的提升打包大小减少41%初次渲染快55%,更新渲染快133%内存减少54%源码的升级使用Proxy代替defineProperty实现响应式重写虚拟DOM的实现和Tree-Shaking拥抱TypeScriptVue3可以更好的支持TypeScript新的特性CompositionApi(组合Api)setupref......
  • oban elixir 强大的任务处理框架
    obanelixir强大的任务处理框架,后端存储基于了sqlite或者pg包含的特性IsolatedQueuesQueueControlResilientQueuesJobCancelingTriggeredExecutionUniqueJobsScheduledJobsPeriodic(CRON)JobsJobPriorityHistoricMetricsNodeMetricsGracefulShutdownTelemetryInteg......
  • openGauss学习笔记-189 openGauss 数据库运维-常见故障定位案例-TPCC-WAL-内存
    openGauss学习笔记-189openGauss数据库运维-常见故障定位案例-TPCC-WAL-内存189.1TPCC运行时,注入磁盘满故障,TPCC卡住的问题189.1.1问题现象TPCC运行时,注入磁盘满故障,TPCC卡住,故障消除后,TPCC自动续跑。189.1.2原因分析数据库本身机制,在性能日志(gs_profile)所在磁盘满时,导致......
  • openGauss学习笔记-190 openGauss 数据库运维-常见故障定位案例-服务启动失败
    openGauss学习笔记-190openGauss数据库运维-常见故障定位案例-服务启动失败190.1服务启动失败190.1.1问题现象服务启动失败。190.1.2原因分析配置参数不合理,数据库因系统资源不足,或者配置参数不满足内部约束,启动失败。由于部分数据节点状态不正常,导致数据库启动失败。......
  • 软件测试/测试开发/全日制|pytest如何标记测试用例
    前言在pytest中,有时候我们并不需要对所有的用例全部执行。pytest提供了一种机制:有选择的挑选用例去执行,即标记测试函数。下面详细介绍几种方法给函数标记。使用pytest.mark在函数上进行标记标记格式@表示这是一个装饰器,pytest.mark是pytest固定的写法,mark_name可以使用自定义标记......
  • elixir erlang 简单调用学习
    实际上基于elixir的mix进行erlang以及elixir的互调用开发处理是很方便的,mix直接就包含了构建erlang代码同时对于代码的互调用,只要使用符合语言格式要求就行了,以下是一个简单的互调用学习项目准备项目结构 ├──README.md├──lib│├──a.ex│└──er_app......
  • absinthe elixir 的graphql 框架简单试用
    absintheelixir的graphql框架包含的特性graphql草案的完整实现插件化设计异步字段解析以及批量解析,同时支持插件化的解析支持安全包含了基于GraphiQL的playground项目测试基于了phoenix框架创建phoenix项目mixphx.newabsinthe_phx添加sqliteecto依赖默认phoenix使用了......
  • stm32学习总结:6、Proteus8+STM32CubeMX+MDK仿真蜂鸣器及ADC读取电压(Proteus标签整理原
    stm32学习总结:6、Proteus8+STM32CubeMX+MDK仿真蜂鸣器及ADC读取电压(Proteus标签整理原理图)文章目录stm32学习总结:6、Proteus8+STM32CubeMX+MDK仿真蜂鸣器及ADC读取电压(Proteus标签整理原理图)一、前言二、资料收集三、STM32CubeMX配置按键及蜂鸣器连接口1、按键及LED的IO口配置2、......