您好,我想与您分享一个快速的教程,以简单的方式使用与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您要生成的消息。
这是我在这里写的。我希望你喜欢它。 : - )