Ich habe einen SqsQueueSender, um Nachrichten an AWS zu senden. Ich möchte diese Klasse testen. Mein Gedanke ist, dass es eine @Component
sein sollte, die in die Klassen injiziert wird, die es brauchen. Wichtig ist, dass ich den Endpunkt der SqsQueueSender
so konfigurieren möchte, dass er sich in Test- und Produktionsumgebungen unterscheidet.So konfigurieren Sie die @ Component-Klasse
Ich habe @Autowired und @Component um die Klassen verschiedene Wege verlegt, muss aber ein grundlegendes Missverständnis haben. Hier ist meine letzte Konfiguration:
package com.foo.fulfillmentApi.dao;
import com.amazonaws.services.sqs.AmazonSQSAsyncClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.aws.messaging.core.QueueMessagingTemplate;
import org.springframework.messaging.support.MessageBuilder;
@Component
public class SqsQueueSender {
private static final Logger LOGGER = LoggerFactory.getLogger(SqsQueueSender.class);
private final QueueMessagingTemplate queueMessagingTemplate;
@Autowired
AmazonSQSAsyncClient amazonSQSAsyncClient;
//This value is from /resources/application.properties
private @Value("${sqs.endpoint}") String endpoint;
public SqsQueueSender(AmazonSQSAsyncClient amazonSqsAsyncClient) {
amazonSqsAsyncClient.setEndpoint(endpoint);
this.queueMessagingTemplate = new QueueMessagingTemplate(amazonSqsAsyncClient);
}
public void send(String queueName, String message) {
this.queueMessagingTemplate.convertAndSend(queueName, MessageBuilder.withPayload(message).build());
}
}
Die Fehlermeldung beim Start Staaten
Verursacht durch: org.springframework.beans.factory.NoSuchBeanDefinitionException: Nein qualifizierenden Bohne vom Typ ‚com.amazonaws. services.sqs.AmazonSQSAsyncClient 'verfügbar: erwartet mindestens 1 Bean, die sich als Autowire-Kandidat qualifiziert. Dependency Anmerkungen: {}
SqsQueueSender
Zur Umsetzung müssen Sie eine AmazonSQSAsyncClient
passieren. Wie stelle ich sicher, dass diese Komponente auf eine vorhandene Bean dieses Typs zugreifen kann?
Ich weiß nichts über aws. Aber wo ist die Definition von 'AmazonSQSAsyncClient' eine Bean? – Patrick
Wenn ich Ihre Frage verstehe, ist diese Klasse in meinem Projekt nicht als '@ Bean' definiert. Wie erstelle ich einen @Bean aus einer bestehenden Klasse, die du importiert hast? –