Diego Plentz
Diego Plentz

Reputation: 7200

Sidekiq-like queue using java tools?

I want to have a work queue that behaves almost exactly like ruby's sidekiq(it doesn't need to use Redis, but it can - I just can't use ruby - not even Jruby). Basically I want to be able to create jobs that runs with some parameters and a worker pool executes the jobs. The workers are going to use hibernate to do some work, so I think that Spring integration could make things easier.

Upvotes: 2

Views: 11028

Answers (2)

zawhtut
zawhtut

Reputation: 8561

Spring Framework has ThreadPoolTaskExecutor. You could use it in your class as follows.

@Autowired
ThreadPoolTaskExecutor executor;

ThreadPoolTaskExecutor has properties needed to be set before it is put to use. PostConstruct will be executed after the dependency injections, so we can set the properities of ThreadPoolExecutor there.

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

Then you can start using executor as follow

executor.execute(new EmailtoCustomerTask("[email protected]"));

The only requirement needed to become a task is to implement the Runnable interface.

private class EmailtoCustomerTask implements Runnable

Upvotes: 0

Gary Russell
Gary Russell

Reputation: 174689

Spring Integration has Redis Queue inbound and outbound channel adapters.

The inbound message-driven adapter doesn't currently support concurrency; we worked around that in Spring XD with a composite adapter that wraps a collection of RedisQueueMessageDrivenEndpoint.

Or you could use RabbitMQ; the Spring Integration adapter for it does support concurrency.

EDIT

The bus was extracted to a sub project within that repo.

Upvotes: 1

Related Questions