spring-cloud-aws
spring-cloud-aws copied to clipboard
Can we use RefreshScope with SImpleMessageListener in AWS SQS ?
When I use refresh scope for SImpleMessageListener in my project, my SQS stops from working. So I used SimpleMessageListenerFactory which made it work but after refresh scope was done it didnot look like it picked up the new configuration changes I did. Ex : Max messages, BackoffTime.
Are you using it together with spring-cloud-bus? We may have to work on that. My bet is that we will need something like spring-cloud-bus-sqs integration module on top of spring-cloud-aws-sqs and spring-cloud-bus
no have not used spring-cloud-bus. So as you mentioned is this kind of refresh is now available or something on on the works ? Sorry I posted this initial question sometime back and just restarted looking into it. Thanks
looks like I misunderstood your question but if you are trying to reload properties, yes, it works I have tried using parameter store and secrets manager. You can find the info below. However, not sure if it will work with the configs for sqs which is your specific question.
@RefreshScope
@RestController
public class HelloRestController {
@Value("${hello.secretmessage}")
private String hello;
@GetMapping("/hello/{name}")
public String hello(@PathVariable String name) {
return this.hello + " " + name;
}
}
- Create
aws secretsmanager create-secret --name "/secret/application" --secret-string '{"hello.secretmessage":"Hello"}' - Start application
- See
Hello - Update
aws secretsmanager update-secret --secret-id /secret/application --secret-string '{"hello.secretmessage":"Hola"}' - Perform
curl -X POST http://localhost:8080/actuator/refresh - See "Hola"
Make sure you have spring-boot-starter-actuator dependency and the following property management.endpoints.web.exposure.include=refresh.
@eddumelendez - Is there any followup on this? When I POST to /actuator/refresh on a service that is up and connected to SQS queue using spring-cloud-aws-messaging:jar:2.2.1.RELEASE then I get the following error in my logs:
The String-to-Sign should have been
'AWS4-HMAC-SHA256
numbers
numbers/region/sqs/aws4_request
numbers' (Service: AmazonSQS; Status Code: 403; Error Code: SignatureDoesNotMatch; Request ID: numbers)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1660) ~[aws-java-sdk-core-1.11.415.jar:na]
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1324) ~[aws-java-sdk-core-1.11.415.jar:na]
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1074) ~[aws-java-sdk-core-1.11.415.jar:na]
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:745) ~[aws-java-sdk-core-1.11.415.jar:na]
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:719) ~[aws-java-sdk-core-1.11.415.jar:na]
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:701) ~[aws-java-sdk-core-1.11.415.jar:na]
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:669) ~[aws-java-sdk-core-1.11.415.jar:na]
at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:651) ~[aws-java-sdk-core-1.11.415.jar:na]
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:515) ~[aws-java-sdk-core-1.11.415.jar:na]
at com.amazonaws.services.sqs.AmazonSQSClient.doInvoke(AmazonSQSClient.java:2147) ~[aws-java-sdk-sqs-1.11.415.jar:na]
at com.amazonaws.services.sqs.AmazonSQSClient.invoke(AmazonSQSClient.java:2116) ~[aws-java-sdk-sqs-1.11.415.jar:na]
at com.amazonaws.services.sqs.AmazonSQSClient.invoke(AmazonSQSClient.java:2105) ~[aws-java-sdk-sqs-1.11.415.jar:na]
at com.amazonaws.services.sqs.AmazonSQSClient.executeReceiveMessage(AmazonSQSClient.java:1559) ~[aws-java-sdk-sqs-1.11.415.jar:na]
at com.amazonaws.services.sqs.AmazonSQSAsyncClient$14.call(AmazonSQSAsyncClient.java:1057) ~[aws-java-sdk-sqs-1.11.415.jar:na]
at com.amazonaws.services.sqs.AmazonSQSAsyncClient$14.call(AmazonSQSAsyncClient.java:1051) ~[aws-java-sdk-sqs-1.11.415.jar:na]
Please ignore the "numbers". Removed values in case they were leaking anything secret.