@IntegrationComponentscan Annotation kann @MessageGateway -Komponente nicht scannen

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: @IntegrationComponentscan Annotation kann @MessageGateway -Komponente nicht scannen

by Anonymous » 14 Feb 2025, 08:11

Ich verwende Springboot3.2 und SpringIneGeGration6 für die Unterstützung von MQTT-Nachrichten,
Ich habe ein öffentliches Maven-Modul namens SZ-Common-MQTT definiert, und der Effekt, den ich erreichen möchte Dieses Modul kann direkt die MQTT-bezogenen Nachrichtenkomponenten verwenden. Die Maven-Abhängigkeit dieses Moduls lautet wie folgt < /p>

Code: Select all


4.0.0

com.sz
sz-common
${revision}

sz-common-mqtt


org.springframework.boot
spring-boot-starter-integration


org.springframework.integration
spring-integration-mqtt


org.eclipse.paho
org.eclipse.paho.mqttv5.client



Dann habe ich 2 Klassen unter dem Paket com.sz.mqtt.config definiert. = "Lang-Java PrettyPrint-Override">

Code: Select all

@MessagingGateway(defaultRequestChannel = "mqttOutboundChannel")
public interface MqttGateway {
void sendToMqtt(String data);
}
< /code>
package com.sz.mqtt.config;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.mqttv5.client.MqttConnectionOptions;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.annotation.IntegrationComponentScan;
import org.springframework.integration.dsl.IntegrationFlow;
import org.springframework.integration.dsl.MessageChannels;
import org.springframework.integration.mqtt.outbound.Mqttv5PahoMessageHandler;
import org.springframework.messaging.MessageHandler;
import org.springframework.messaging.converter.*;
import java.util.concurrent.Executors;

@Configuration
@IntegrationComponentScan("com.sz.mqtt.config")
@Slf4j
@ConfigurationProperties(prefix = "mqtt")
@Data
public class MqttConfig {
private String clientIdInbound;
private String clientIdOutbound;
private String url;
private String password;
private String username;

@Bean
public MqttConnectionOptions mqttConnectOptions(){
MqttConnectionOptions options = new MqttConnectionOptions();
options.setServerURIs(new String[] { url});
options.setUserName(username);
options.setPassword(password.getBytes());
options.setAutomaticReconnect(true);
return options;
}

@Bean
public SimpleMessageConverter simpleMessageConverter(){
return new SimpleMessageConverter();
}

@Bean
public MessageHandler mqttOutboundHandler(MqttConnectionOptions connectionOptions) {
Mqttv5PahoMessageHandler messageHandler = new Mqttv5PahoMessageHandler(connectionOptions,clientIdOutbound);
messageHandler.setAsync(true);
messageHandler.setDefaultTopic("defaultTopic");
messageHandler.setDefaultQos(0);
messageHandler.setConverter(simpleMessageConverter());
return messageHandler;
}

@Bean
public IntegrationFlow mqttOutboundFlow(MessageHandler mqttOutboundHandler){
return IntegrationFlow.from("mqttOutboundChannel")
.channel(MessageChannels.executor(Executors.newFixedThreadPool(5)))
.handle(mqttOutboundHandler)
.get();
}

}
Ich verlasse mich in meinem Springboot-Modul (ein anderes Maven-Modul) auf das SZ-Common-MQTT

Code: Select all

        
com.sz
sz-common-mqtt
${revision}

< /code>
Dann injee ich die MQTTGateway-Komponente direkt mit Spring@component+lombok < /p>
 ein@Component
@Slf4j
@RequiredArgsConstructor
public class UnitClientManager {
private final Map SESSION_MAP = new ConcurrentHashMap();
private final MqttGateway mqttGateway;
private final IntegrationFlowContext integrationFlowContext;
..........  other info
}
< /code>
Wenn ich Springboot starte, erhalte ich den folgenden Fehler < /p>

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of constructor in sz.device.session.UnitClientManager required a bean of type 'com.sz.mqtt.config.MqttGateway' that could not be found.

Action:

Consider defining a bean of type 'com.sz.mqtt.config.MqttGateway' in your configuration.

Wie kann das obige Problem gelöst werden, um den Zweck der automatischen Zusammenstellung von MQTTGateway -Komponenten zu erreichen?

Top