Processor interface
DirPoll.Processor is the byte-in / byte-out interface. DirPoll reads
the request file, hands you the raw bytes, and writes whatever you return
to the response/ directory. You never touch the filesystem directly.
Interface
public interface Processor {
byte[] process(String name, byte[] request)
throws DirPoll.DirPollException;
}
| Parameter | Description |
|---|---|
name | The request file name, e.g. "order-123.req" |
request | Raw contents of the request file |
| return | Bytes to write to response/ — return null to suppress the response file |
If processing fails, throw a DirPollException. The file moves to
bad/. If the error is transient, set retry = true on the exception
and DirPoll will move the file back to request/ after a back-off delay.
EchoProcessor
The tutorial ships a minimal EchoProcessor that echoes the file content
back as a response:
public class EchoProcessor implements DirPoll.Processor {
@Override
public byte[] process(String name, byte[] request)
throws DirPoll.DirPollException {
String content = new String(request, StandardCharsets.UTF_8).trim();
String response = "ECHO [" + name + "]: " + content + System.lineSeparator();
return response.getBytes(StandardCharsets.UTF_8);
}
}
Try it
Build and install, then start Q2:
./gradlew :tutorials:dirpoll:installApp
./tutorials/dirpoll/bin/q2
In another terminal, drop a file into the request directory:
echo "hello world" > tutorials/dirpoll/build/install/dirpoll/dirpoll/request/test.req
After one poll interval (1 second by default) you will see a matching file
in dirpoll/response/:
ECHO [test.req]: hello world
The original request file is moved to dirpoll/archive/ (because
archive=true in the deploy descriptor).
Response file naming
By default the response file keeps the same name as the request. You can
change the suffix via the response.suffix property:
<property name="response.suffix" value=".resp" />
With that setting a request named order-123.req produces a response
named order-123.resp.
Returning null
Returning null from process() is valid and means "no response needed".
DirPoll skips writing to response/ entirely. Use this for fire-and-forget
requests where the caller does not poll for a response.