如何在 Spring Cloud AWS SQS 中以编程方式设置消息处理程序?

Xim*_*mon 6 spring rabbitmq amazon-sqs spring-cloud

也许有人对我的以下问题有所了解:

我目前在一个项目中,我想将 AWS SQS 与 Spring Cloud 集成一起使用。对于接收器部分,我想提供一个 API,用户可以在其中注册一个队列上的“消息处理程序”,这是一个接口,将包含用户的业务逻辑,例如

MyAwsSqsReceiver receiver = new MyAwsSqsReceiver();
receiver.register("a-queue-name", new MessageHandler(){
  @Override
  public void handle(String message){
    //... business logic for the received message
  }
});
Run Code Online (Sandbox Code Playgroud)

我找到了示例,例如 https://codemason.me/2016/03/12/amazon-aws-sqs-with-spring-cloud/ 并阅读文档 http://cloud.spring.io/spring-cloud-aws /spring-cloud-aws.html#_sqs_support

但是我在那里发现唯一可以“连接”处理传入消息的功能的是方法上的注释,例如@SqsListener@MessageMapping

不过,这些注释固定为某个队列名称。所以现在我不知所措,如何将我提供的“MessageHandler”(来自我的 API)动态“连接”到指定队列名称的传入消息。

在 Config 示例中有一个SimpleMessageListenerContainer,它获取一个QueueMessageHandler集合,但是这个 QueueMessageHandler 似乎不是设置我的处理程序或覆盖其方法并提供我自己的QueueMessageHandler.

我已经用 Spring Amqp 集成和 RabbitMq 做了类似的事情,并认为,它也与 AWS SQS 类似。

有没有人有想法,如何实现这一目标?

谢谢+再见,Ximon

编辑

我发现,Spring JMS 实际上可以做到这一点,例如www.javacodegeeks.com/2016/02/aws-sqs-spring-jms-integration.html。有谁知道,使用 JMS 协议有什么后果,好还是坏?

has*_*vec -1

当我们做 Spring 和 SQS 时,我们使用 spring-cloud-starter-aws-messaging。

然后创建一个Listener类

@Component
public class MyListener {

@SQSListener(value="myqueue")
public void listen(MyMessageType message) {
//process the message
}
}
Run Code Online (Sandbox Code Playgroud)