aeron-io/aeron · error · IllegalArgumentException
unsupported unicast flow control strategy: fc=
Error message
unsupported unicast flow control strategy: fc=${fcStr} What it means
DefaultUnicastFlowControlSupplier.newInstance throws IllegalArgumentException if a fc= flow control parameter is present on a unicast channel URI, because the default unicast supplier supports no strategy selection at all.
Solutions
- Remove the fc= parameter from the unicast channel URI
- Use a custom FlowControlSupplier if you need selectable strategies on unicast
- Use a multicast endpoint if you actually need the multicast flow control options
Example fix
// before "aeron:udp?endpoint=localhost:40456|fc=min" // throws on unicast // after "aeron:udp?endpoint=localhost:40456" // fc param removed
Defensive patterns
Strategy: validation
Validate before calling
java.net.URI u = java.net.URI.create(channel); if (u.getQuery() != null && u.getQuery().contains("fc=")) throw new IllegalArgumentException("fc= not supported on unicast channels"); Prevention
- Never add fc= to unicast aeron:udp URIs
- Keep separate URI templates for unicast and multicast channels
When it happens
Trigger: Adding |fc=... to a unicast (non-multicast) UDP channel URI while the default unicast flow control supplier is configured.
Common situations: Copy-pasting a multicast channel URI (which uses fc= for Min/Max/Tagged strategies) onto a unicast endpoint, or a shared channel template that includes fc= unconditionally.
Understand the failure class
Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.
Related errors
- unsupported multicast flow control strategy: fc=
- Unable to derive…
- Subscription URI must have 'control-mode=manual' uri=
- Property = is not a number
- mtuLength= > initialWindowLength=
AI-assisted analysis of aeron-io/aeron@6d60124e15 (2026-09-12).
Data as JSON: /api/errors/a5bc7e10f51a4d93.
Report an issue: GitHub.
Appendix: source
Thrown at aeron-driver/src/main/java/io/aeron/driver/DefaultUnicastFlowControlSupplier.java:48
/**
* Default constructor.
*/
public DefaultUnicastFlowControlSupplier()
{
}
/**
* {@inheritDoc}
*/
@Override
public FlowControl newInstance(final UdpChannel udpChannel, final int streamId, final long registrationId)
{
final String fcStr = udpChannel.channelUri().get(CommonContext.FLOW_CONTROL_PARAM_NAME);
FlowControl flowControl = null;
if (null != fcStr)
{
throw new IllegalArgumentException("unsupported unicast flow control strategy: fc=" + fcStr);
}
if (UnicastFlowControl.class.getName().equals(UNICAST_FLOW_CONTROL_STRATEGY))
{
return new UnicastFlowControl();
}
try
{
flowControl = (FlowControl)Class.forName(UNICAST_FLOW_CONTROL_STRATEGY)
.getConstructor()
.newInstance();
}
catch (final Exception ex)
{
LangUtil.rethrowUnchecked(ex);
}
View on GitHub (pinned to 6d60124e15)