spring-cloud-aws icon indicating copy to clipboard operation
spring-cloud-aws copied to clipboard

Can we use RefreshScope with SImpleMessageListener in AWS SQS ?

Open oh-isuri-bandara opened this issue 5 years ago • 4 comments

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.

oh-isuri-bandara avatar Jun 17 '20 20:06 oh-isuri-bandara

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

eddumelendez avatar Sep 15 '20 02:09 eddumelendez

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

oh-isuri-bandara avatar Oct 13 '20 19:10 oh-isuri-bandara

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;
	}
}
  1. Create aws secretsmanager create-secret --name "/secret/application" --secret-string '{"hello.secretmessage":"Hello"}'
  2. Start application
  3. See Hello
  4. Update aws secretsmanager update-secret --secret-id /secret/application --secret-string '{"hello.secretmessage":"Hola"}'
  5. Perform curl -X POST http://localhost:8080/actuator/refresh
  6. See "Hola"

Make sure you have spring-boot-starter-actuator dependency and the following property management.endpoints.web.exposure.include=refresh.

eddumelendez avatar Oct 26 '20 03:10 eddumelendez

@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.

azizabah avatar May 19 '21 18:05 azizabah