Recceiver is a Java/Spring Boot RecSync receiver. It accepts TCP uploads from RecCaster clients, maintains connection keepalive with ping/pong, and dispatches uploaded changes to pluggable processors via Java SPI.
Use this README in the order that fits your task:
Quickstartfor getting up and running quicklyHow-To Guidesfor specific setup and integration tasksReferencefor exact configuration and code map detailsExplanationfor design and runtime behavior context
- JDK 21 (the project compiles with Java 21)
- Maven 3.9+
From the project root, preferred option:
mvn -DskipTests package
java -jar target/recceiver-4.7.2-SNAPSHOT.jarAlternative (runs directly from source via Spring Boot Maven plugin):
mvn spring-boot:runThe executable jar starts org.phoebus.recceiver.RecceiverApplication.
What to look for in logs:
Listening on : <bind-address>:<port>started announcing...
By default, this is controlled by src/main/resources/application.properties.
mvn testBuild and run the container image:
docker build -t recceiver:local .
docker run --rm -p 5064:5064/tcp -p 5049:5049/udp recceiver:localNotes:
- Container defaults set
TCP_BIND_ADDRESS=0.0.0.0andTCP_PORT=5064so the TCP listener is reachable from outside the container. - Override properties with environment variables (Spring relaxed binding), for example:
TCP_PORT=5070UDP_BROADCAST_PORT=5049RECCEIVER_CF_SERVICE_URL=http://host.docker.internal:9090/ChannelFinder
docker compose up --buildCompose file: docker-compose.yml
Compose is configured with network_mode: host.
- No
ports:mapping is needed in this mode. - Recceiver listens directly on the host network using
TCP_PORT/UDP_BROADCAST_PORT. RECCEIVER_CF_SERVICE_URLdefaults tohttp://localhost:9090/ChannelFinderin compose.- Host networking is primarily a Linux Docker mode. On Docker Desktop (Windows/macOS), use the direct
docker run -p ...flow if host mode is unavailable.
Set these in src/main/resources/application.properties:
tcpBindAddress=0.0.0.0
tcpPort=0- Use
0.0.0.0to accept remote clients on all interfaces. - Use
tcpPort=0for OS-assigned ephemeral port, or set a fixed port for static deployments.
udpBroadcastAddress=255.255.255.255
udpBroadcastPort=5049
announceInterval=15.0- Keep
5049unless your clients are configured differently. - Increase
announceIntervalto reduce network chatter.
tcptimeout=15.0
readBufferSize=4096tcptimeoutcontrols ping cadence and timeout behavior.readBufferSizecontrols per-read buffer size inMessageProcessor(minimum 8 bytes enforced in code).
- Implement
org.phoebus.recceiver.spi.RecSyncProcessor. - Package your implementation in a JAR.
- Add service registration file:
META-INF/services/org.phoebus.recceiver.spi.RecSyncProcessor
- Put the JAR on Recceiver's runtime classpath.
Detailed SPI contract: docs/spi.md.
- RecSync protocol:
docs/recsync_protocol.md - SPI extension contract:
docs/spi.md
Defined in src/main/resources/application.properties and consumed in src/main/java/org/phoebus/recceiver/RecceiverApplication.java.
| Property | Default | Meaning |
|---|---|---|
tcpBindAddress |
localhost |
Interface/address used by TCP listener |
tcpPort |
0 |
TCP port (0 = OS picks free port) |
tcptimeout |
15.0 |
Ping/pong interval and timeout window (seconds) |
readBufferSize |
4096 |
Per-read buffer size in bytes |
udpBroadcastAddress |
255.255.255.255 |
Destination address for UDP announcements |
udpBroadcastPort |
5049 |
Destination UDP port for announcements |
announceInterval |
15.0 |
UDP announce period (seconds) |
commitInterval |
5.0 |
Commit interval setting (currently present for future wiring) |
commitSizeLimit |
0 |
Commit size setting (currently present for future wiring) |
- Server listens on TCP and sends periodic UDP announcements.
- Client connects and performs handshake (
0x0001/0x8001). - Client uploads add/delete/info messages.
- Upload completion (
0x0005) triggers transaction dispatch. - Keepalive ping/pong (
0x8002/0x0002) maintains connection health.