Ich teste ein Upgrade meiner Spring Cloud DataFlow-Dienste von Spring Cloud Dalston.SR4/Spring Boot 1.5.9 bis Spring Cloud Edgware/Spring Boot 1.5.9 . Einige meiner Dienste erweitern Source- (oder Sink-) Komponenten von App-Startern. Ich habe festgestellt, dass dies nicht mit Spring Cloud Edgware funktioniert.Überschriebene RabbitSourceConfiguration (App-Starter) funktioniert nicht mit Spring Cloud Edgware
Zum Beispiel habe ich org.springframework.cloud.stream.app.rabbit.source.RabbitSourceConfiguration
überschrieben und meine App an meine überschriebene Version gebunden. Dies hat früher mit Spring Cloud-Versionen gearbeitet, die fast ein Jahr zurückreichen.
Mit Edgware, erhalte ich die folgende (ob die App eigenständig ausgeführt wird oder innerhalb Datenfluß):
***************************
APPLICATION FAILED TO START
***************************
Description:
Field channels in org.springframework.cloud.stream.app.rabbit.source.RabbitSourceConfiguration required a bean of type 'org.springframework.cloud.stream.messaging.Source' that could not be found.
Action:
Consider defining a bean of type 'org.springframework.cloud.stream.messaging.Source' in your configuration.
ich das gleiche Verhalten mit dem 1.3.0.RELEASE und 1.2.0.RELEASE des Frühlings erhalten -cloud-starter-stream-kaninchen.
Ich überschreibe RabbitSourceConfiguration, damit ich einen Header-Mapper auf dem AmqpInboundChannelAdapter festlegen kann, und auch einen Verbindungstest vor dem Starten des Containers durchführen.
Meine Unterklasse ist an die Spring Boot-Anwendung mit @EnableBinding(HeaderMapperRabbitSourceConfiguration.class)
gebunden. Eine cutdown Version meiner Unterklasse ist:
public class HeaderMapperRabbitSourceConfiguration extends RabbitSourceConfiguration {
public HeaderMapperRabbitSourceConfiguration(final MyHealthCheck healthCheck,
final MyAppConfig config) {
// ...
}
@Bean
@Override
public AmqpInboundChannelAdapter adapter() {
final AmqpInboundChannelAdapter adapter = super.adapter();
adapter.setHeaderMapper(new NotificationHeaderMapper(config));
return adapter;
}
@Bean
@Override
public SimpleMessageListenerContainer container() {
if (config.performConnectivityCheckOnStartup()) {
if (LOGGER.isInfoEnabled()) {
LOGGER.info("Attempting connectivity with ...");
}
final Health health = healthCheck.health();
if (health.getStatus() == Status.DOWN) {
LOGGER.error("Unable to connect .....");
throw new UnableToLoginException("Unable to connect ...");
} else if (LOGGER.isInfoEnabled()) {
LOGGER.info("Connectivity established with ...");
}
}
return super.container();
}
}
Zeigen Sie Ihre 'RabbitSourceConfiguration'. –
Ich habe die Config-Klasse zur ursprünglichen Frage hinzugefügt. – bikerlad