使用Java发送AWS SQS消息
#aws #java #开发人员 #sqs

您好,我想与您分享一个快速的教程,以简单的方式使用与Java一起使用REST API,以简单的方式将消息发送到SQS队列,在本教程中,我不会介绍主题,例如安全性和体系结构,只是对访问和SQ的基础知识的理解。

我正在使用:

  • Java 11带有弹簧2.3.3
  • Smart
  • Maven 4.0.0

有必要对AWS帐户和SQS队列进行一些知识,才能与本教程一起使用,实际上!

您需要在POM文件上包括以下依赖项:

<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>LATEST</version>
</dependency>

现在,我们必须在属性文件中将一些访问信息放在AWS中进行身份验证,并告诉我们要使用哪个SQS队列(AWS.Queue)。创建它时,访问和秘密键在AWS控制台中通知:

aws.access_key_id=
aws.secret_access_key=
aws.queue=
aws.region=sa-east-1

注意: aws.region = sa-east-1指示我所在的区域,在AWS website中检查正确的区域。

使用配置类,我们对我们上面的属性文件中输入的信息进行引用,然后使用Bean SQSClient在AWS中进行身份验证:

@Configuration
public class AWSConfig {

    @Value("${aws.access_key_id}")
    private String awsId;

    @Value("${aws.secret_access_key}")
    private String awsKey;

    @Value("${aws.region}")
    private String region;

    @Bean
    public AmazonSQS sqsClient(){
        BasicAWSCredentials basicAWSCredentials = new BasicAWSCredentials(awsId, awsKey);
        return AmazonSQSClientBuilder.standard().withRegion(Regions.fromName(region)).withCredentials(new AWSStaticCredentialsProvider(basicAWSCredentials)).build();
    }
}

完成配置后,我们将创建一个服务以将消息发送到队列:

@Service
public class SQSService {

    @Autowired
    private AmazonSQS sqsClient;

    @Value("${sqs.queue}")
    private String queueUrl;

    public void sendMessage(String msg) {
        SendMessageRequest send_msg_request = new SendMessageRequest()
                .withQueueUrl(queueUrl)
                .withMessageBody(msg)
                .withDelaySeconds(5);
        sqsClient.sendMessage(send_msg_request);
    }
}

我指示我要在属性文件中访问的队列并使用Amazon界面(AmazonSQS),因此我可以调用作为参数作为参数的方法sendmessage。该方法删除了贝克德斯(Delayseconds)在几秒钟内延迟将消息传递给队列。

要访问我们的方法,我为AWS测试创建了一项特定的服务,我们的控制器类将调用该方法:

@Service
public class AWSTestService {

    @Autowired
    private SQSService sqsService;

    public void sendMessage(SQSMessage sqsMessage) {
        String msg = sqsMessage.getMsg();
        sqsService.sendMessage(msg);
    }
}

在此服务中,我为发送消息创建的服务注射服务

要接收消息作为请求机构,我创建了一个基本域类:

public class SQSMessage {
    private String msg;

    public SQSMessage(){}

    public SQSMessage(String msg) {
        this.msg = msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getMsg() {
        return msg;
    }
}

最后,使用域类,控制器可以调用我们创建的方法,并发送我们在请求正文中收到的消息:

@RestController
@RequestMapping("/awstest")
public class AWSTestController {

    @Autowired
    private AWSTestService service;

    @PostMapping(value="/message")
    public ResponseEntity<Void> sendMessage(@RequestBody SQSMessage sqsMessage){
        service.sendMessage(sqsMessage);
        return ResponseEntity.ok().build();
    }

}

现在,您可以使用Postman进行测试,并在SQS部分中检查Amazon Console您要生成的消息。

这是我在这里写的。我希望你喜欢它。 : - )