apache / camel-quarkus

Apache Camel Quarkus
https://camel.apache.org
Apache License 2.0
256 stars 191 forks source link

Auto-Configuration for Camel-Master Service-Selector #6488

Open anchialas opened 1 month ago

anchialas commented 1 month ago

Bug description

We have multiple Camel-Master Service Providers active in our Quarkus camel app with

Therefore we would like to replace the default SelectSingle selector [1] with the SelectByOrder implementation. For this we use the property camel.component.master.service-selector. Since an instance is expected as the value, we have also written a simple converter:

@Converter
public class ClusterSelectorConverter {
    @Converter
    public CamelClusterService.Selector convert(String selectorClass) {
        try {
            return (CamelClusterService.Selector)Class.forName(selectorClass).getConstructor().newInstance();
        } catch (Exception ex) {
            throw new IllegalStateException(ex);
        }
    }
}

This all works, but the auto-configuration mechanism [2] takes effect too late: the master component has already been initialized with the default selector [3].

How can the selector be configured “correctly”?

Thank you! # [1] org.apache.camel.support.cluster.ClusterServiceSelectors#DEFAULT_SELECTOR [2] MainHelper.setPropertiesOnTarget:323 [3] MainHelper.setPropertiesOnTarget:303

jamesnetherton commented 1 month ago

How can the selector be configured “correctly”?

You could get a handle on the master component within a CDI observer and use setServiceSelector to pass in your custom selector. See example here:

https://camel.apache.org/camel-quarkus/next/user-guide/configuration.html#_cdi