Giter Site home page Giter Site logo

jsidekiq's Introduction

jsidekiq

java 版后台任务,参考:sidekiq

使用场景:

  • 同步方法改为异步方法 用例:用户注册异步发送邮件
@JSidekiqLabel(retry = 3,description = "异步发送注册邮件",queue = "sendMail")
public Boolean sendMail(String email)
  • 同步方法改为延迟方法 用例: 用户下单,30分钟后不付款,订单无效,库存恢复
	@JSidekiqLabel(retry = 3,description = "订单监控",queue = "tradeMonit",at=1800000)
	public Boolean tradeMonit(Long tradeId)
  • JSidekiqLabel 标签解释:
    • retry:默认:3,业务执行失败后,重试的次数
    • description: 业务解释
    • queue: 默认:DEFAULT,存放的队列名称,可用于队列的隔离
    • at: 表示延迟多长时间执行

极速感受

技术栈

  • java

    • spring , spring boot
    • aop
    • velocity
    • fastjson
  • redis

正式使用

  • 下载项目maven 编译

  • 生成的client/target/jsidekiq-client-1.0-SNAPSHOT.jar 放入你的项目

  • spring boot 参考:application.yml

    • maven:

      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-aop</artifactId>
      </dependency>
      
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
      </dependency>
      
      <dependency>
        <groupId>io.liang.jsidekiq</groupId>
        <artifactId>client</artifactId>
        <version>1.0-SNAPSHOT</version>
        <scope>system</scope>
        <systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/client-1.0-SNAPSHOT.jar</systemPath>
      </dependency>
         
      
    • SpringBootApplication 增加扫描文件

    @ComponentScan(basePackages={".","io.liang.jsidekiq"})
    
    • 在application.yml 中配置 jsidekiq:configUrl 详细请看 jsidekiq:configUrl 参数说明
  • 非spring boot 项目:

    • web.xml 配置
        <context-param>
            <param-name>jsidekiq.configUrl</param-name>
            <param-value>
                <![CDATA[http://jsidekiq?nameSpace=io::liang::sidekiq&provider=springDataRedis&consumerQueue=demo&maxTotal=2&deadMaxJob=90&deadTimeout=60000000&admin=false&adminName=admin&adminPassword=admin]]>
            </param-value>
        </context-param>
        
        <listener>
            <listener-class>io.liang.jsidekiq.client.start.JsidekiqListener</listener-class>
        </listener>
    
    • spring xml 配置:
    <context:component-scan base-package="io.liang.jsidekiq" />
        
    <bean id="stringRedisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
        <property name="connectionFactory" ref="jedisConnectionFactory"></property>
        <property name="defaultSerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
        </property>
    </bean>
    
    <aop:aspectj-autoproxy proxy-target-class="true" />
    
  • jsidekiq:configUrl 参数说明:

    http://jsidekiq?nameSpace=io::liang::sidekiq&provider=springDataRedis&consumerQueue=demo&maxTotal=2&deadMaxJob=90&deadTimeout=60000000&admin=false&adminName=admin&adminPassword=admin
    
    • 参数解释:

      • nameSpace:: 命名空间,用于多个后台任务的隔离
      • provider:默认:springDataRedis,数据提供者,暂时只支持spring data redis
      • consumerQueue: 监控的队列名称,多个逗号风格,如果为空,表示监控所有队列
      • maxTotal:开启的最大消费线程数
      • deadMaxJob: 出错的任务保存的最大个数
      • deadTimeout:出错的任务超时时间,超时后删除
      • admin:true | false 是否是dashboard,是表示不运行消费者线程
      • adminName: dashboard 的账户
      • adminPassword:dashboard 的密码
    • redis 信息配置 最终需要在spring 中提供一个 StringRedisTemplate

  • 同步方法设置标签标识为异步方法: 在方法上增加标签:@JSidekiqLabel(retry = 3,description = "订单监控",queue = "tradeMonit",at=1800000) 标签说明:

    • retry: 方法出错,重试的次数
    • description: 对方法的描述
    • queue:放入的队列名称,空表示放入默认队列:DEFAULT
    • at:延迟的毫秒数,1800000:表示30分钟

时序图:

sequence

业务方 -> jsidekiq proxy : 调用业务代理类,aop 拦截
jsidekiq proxy -> redis : 如果使用标签,标明异步方法
redis -> jsidekiq proxy : ok
jsidekiq proxy -> 业务方 : ok
业务方 -> jsidekiq proxy : 消费者线程
jsidekiq proxy -> redis : bpop
redis -> jsidekiq proxy : 业务的meta信息
jsidekiq proxy -> 业务方 : 调用real的业务方法

改进:

  • 耗时任务,在重启过程后 能够不丢失任务

资料:

jsidekiq's People

Contributors

liangxiong avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.