【问题标题】:Sidekiq-like queue using java tools?使用 java 工具的类似 Sidekiq 的队列?
【发布时间】:2014-09-06 02:16:03
【问题描述】:

我想要一个工作队列,其行为几乎与 ruby​​ 的 sidekiq 完全相同(它不需要 使用 Redis,但它可以 - 我只是不能使用 ruby​​ - 甚至 Jruby 都不需要) .基本上我希望能够创建使用某些参数运行的作业,并且工作池执行这些作业。工作人员会使用hibernate来做一些工作,所以我认为Spring集成可以让事情变得更容易。

【问题讨论】:

    标签: java queue message-queue spring-integration sidekiq


    【解决方案1】:

    Spring Integration 有Redis Queue inbound and outbound channel adapters

    入站消息驱动适配器当前不支持并发;我们将worked around that in Spring XD 与包含RedisQueueMessageDrivenEndpoint 集合的复合适配器一起使用。

    或者你可以使用 RabbitMQ;它的 Spring Integration 适配器确实支持并发。

    编辑

    总线被提取到sub project within that repo

    【讨论】:

    • Sidekiq 是一个完整的框架,提供了很多开箱即用的功能,我不认为指向 spring 集成来为自己编写东西是一些答案,但这不是一个好的答案。回答:在那种情况下不应该接受这样的事情。
    • 我没有把他引向那个方向。他特意询问了 SI I think that Spring integration could make things easier. 阅读标题。
    • I just can't use ruby
    • 好的,但仍然觉得回答:“我想要一个行为几乎与 ruby​​ 的 sidekiq 完全相同的工作队列”与使用这个库自己实现它并不完全相同。 :-)
    • @GaryRussell 与您在 Spring XD 中的 RedisMessageBus 实现的链接现在已失效。我很想看到这段代码,因为我正在寻求实现一个 Java Sidekiq 工作程序,当我们将大部分服务迁移到 Java 时,它可以与我们的 Ruby 工作程序一起工作。我在github.com/spring-projects/spring-xd/tree/master/spring-xd-dirt/… 中闲逛时没有看到它是否已被弃用?
    【解决方案2】:

    Spring 框架有ThreadPoolTaskExecutor。你可以在你的课堂上使用它,如下所示。

    @Autowired
    ThreadPoolTaskExecutor executor;
    

    ThreadPoolTask​​Executor 在投入使用之前需要设置属性。 PostConstruct 会在依赖注入之后执行,所以我们可以在那里设置 ThreadPoolExecutor 的属性。

    @PostConstruct
    public void init() {
        executor.setCorePoolSize(5); 
        executor.setMaxPoolSize(10);
        executor.setQueueCapacity(25);
    }
    

    然后就可以开始使用executor了

    executor.execute(new EmailtoCustomerTask("zhw@gmail.com"));
    

    成为任务所需的唯一要求是实现 Runnable 接口。

    private class EmailtoCustomerTask implements Runnable
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-20
      • 2011-04-02
      • 1970-01-01
      相关资源
      最近更新 更多