aeron-io/aeron · error · IllegalArgumentException
unsupported multicast flow control strategy: fc=
Error message
unsupported multicast flow control strategy: fc=${fcStr} What it means
DefaultMulticastFlowControlSupplier.newInstance throws IllegalArgumentException when a multicast flow control strategy requested via the fc= URI parameter (or config) is not one of the supported strategies, and no custom strategy matched.
Solutions
- Use a supported fc= value (e.g. the ones mapped to Default, Min, Max, TaggedMulticastFlowControl)
- Register a custom FlowControlSupplier that supports your strategy string
- Remove the fc= parameter to accept the default strategy
Example fix
// before "aeron:udp?endpoint=239.255.0.1:40456|fc=bogus" // -> IllegalArgumentException // after "aeron:udp?endpoint=239.255.0.1:40456|fc=tagged" // a supported strategy value
Defensive patterns
Strategy: validation
Validate before calling
if (fcStr != null && !Set.of("min","max","tagged" /* valid values */).contains(fcStr)) throw new IllegalArgumentException("unsupported fc=" + fcStr); Prevention
- Validate channel URIs before adding publications/subscriptions
- Check AeronVersion for supported fc strategies
- Remove fc= params on unicast URIs
When it happens
Trigger: Channel URI with fc= set to an unrecognized value while the configured MULTICAST_FLOW_CONTROL_STRATEGY class is DefaultMulticastFlowControlSupplier; the switch over FC_PARAM_VALUE falls to default.
Common situations: Typo like fc=min instead of a valid tag, using a unicast-only strategy name on a multicast channel, or a strategy added in a newer Aeron version than the one on the classpath.
Understand the failure class
Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.
Related errors
- unsupported unicast flow control strategy: fc=
- Property = is not a number
- mtuLength= > initialWindowLength=
- mtuLength= <= HEADER_LENGTH=
- mtuLength= > MAX_UDP_PAYLOAD_LENGTH=
AI-assisted analysis of aeron-io/aeron@6d60124e15 (2026-09-12).
Data as JSON: /api/errors/1f08a5f4c1496943.
Report an issue: GitHub.
Appendix: source
Thrown at aeron-driver/src/main/java/io/aeron/driver/DefaultMulticastFlowControlSupplier.java:61
final String fcStr = udpChannel.channelUri().get(CommonContext.FLOW_CONTROL_PARAM_NAME);
if (null != fcStr)
{
final int delimiter = fcStr.indexOf(',');
final String strategyStr = -1 == delimiter ? fcStr : fcStr.substring(0, delimiter);
switch (strategyStr)
{
case MaxMulticastFlowControl.FC_PARAM_VALUE:
return new MaxMulticastFlowControl();
case MinMulticastFlowControl.FC_PARAM_VALUE:
return new MinMulticastFlowControl();
case TaggedMulticastFlowControl.FC_PARAM_VALUE:
return new TaggedMulticastFlowControl();
default:
throw new IllegalArgumentException("unsupported multicast flow control strategy: fc=" + fcStr);
}
}
if (MaxMulticastFlowControl.class.getName().equals(MULTICAST_FLOW_CONTROL_STRATEGY))
{
return new MaxMulticastFlowControl();
}
else if (MinMulticastFlowControl.class.getName().equals(MULTICAST_FLOW_CONTROL_STRATEGY))
{
return new MinMulticastFlowControl();
}
else if (TaggedMulticastFlowControl.class.getName().equals(MULTICAST_FLOW_CONTROL_STRATEGY))
{
return new TaggedMulticastFlowControl();
}
FlowControl flowControl = null;
tryView on GitHub (pinned to 6d60124e15)