close

Filter

Elastic Social Manual / Version 2304

Table Of Contents

4.5 Message Queue Model

The Elastic Core message queue is based on the idea that method calls (called tasks) may be deferred (that is, queued) to a later point of time where they can be processed concurrently by a pool of worker applications. It is ensured that a task is executed at least once. On errors the task is automatically retried by another worker until an error count limit is reached.

The TaskQueueService persists its information in the same MongoDB as the ModelService and uses the same mapping algorithm to store the arguments of the method calls.

A typical method call sequence when using the TaskQueueService looks like this:

Method call sequence using the TaskQueueService

Figure 4.2. Method call sequence using the TaskQueueService


Creating task queues

To create a TaskQueue with the name mytasks, define a TaskQueueConfiguration like this:

@Named
public class MyTaskQueues implements TaskQueueConfiguration {
  @Inject
  private TaskQueueConfigurationBuilder builder;

  public Iterable<TaskQueue> getTaskQueues() {
    return builder.
            configure("mytasks").
            build();
  }
}

        

Example 4.10. TaskQueueConfiguration


Executing tasks

Tasks are simple classes that contain methods which can have parameters that are handled by the mapping algorithm:

@Named
public class MyTask {
  @Inject
  private ModelService modelService;

  public void doSomething(int id, String name, Object value) {
    Model model = modelService.get(id);
    model.setProperty(name, value);
    model.save();
  }
}

        

Example 4.11. A task class


Execute such a task (called mytasks) via the TaskQueue as follows:

@Inject
private TaskQueueService taskQueueService;

public void executeInTaskQueue() {
  taskQueueService.queue("mytasks", MyTask.class).doSomething(4711, "hello", "world");
}

        

Example 4.12. Execute a task


Search Results

Table Of Contents
warning

Your Internet Explorer is no longer supported.

Please use Mozilla Firefox, Google Chrome, or Microsoft Edge.