【问题标题】:Spring MVC like processing of AMQP messagesSpring MVC 之类的 AMQP 消息处理
【发布时间】:2014-12-26 05:30:05
【问题描述】:

我想要做的是以非常相似的方式处理 AMQP 消息,使用 spring-webmvc 注释处理 Http 请求,例如 @RequestMapping@ RequestParam 等。但是,我的源对象不是 Http Request,而是 AMQP 消息。 AMQP 消息请求会有两个头,例如 -

method="POST"
url="/api/myobjects/{someParam}"

payload 将包含 json 格式的数据。

如果您已经注意到,这只不过是映射到 AMQP 消息的 HTTP REST api。 我希望能够编写一个像处理程序这样的控制器,例如 -

@Controller
public class MyObjectHandler {

    @RequestMapping(value="/api/myobjects/{someParam}", method="POST")
    public MyObject createMyObject(@Payload MyObject myObj, @PathParam String someParam) {
        //... some processing
        return myObj;
    }
    // ...more handlers
}

我查看了spring-amqp/rabbitmq 注释和spring integration 注释。它们接近我想要的,但不允许基于标头参数路由到处理程序方法,尤其是 REST url。

我不希望为此提供现成的解决方案。只是想确保我选择了最好的选择。我认为的一些选项是(按优先顺序)

  • 如果spring-webmvc注解处理机制是可扩展的,只需将其扩展为使用AMQP消息作为源而不是Http请求
  • 修改spring-webmvc注解处理机制,将AMQP消息作为输入,而不是Http Request
  • 使用自定义注释及其处理器编写您自己的解决方案,我认为这是一项非常复杂的任务
  • 或者除上述之外的任何其他可能的方法?

感谢任何指导/方向。

【问题讨论】:

  • 我会不理会 spring-mvc 并写一些 amqp 到 http 层,对我来说似乎更容易

标签: java spring spring-mvc spring-integration spring-amqp


【解决方案1】:

我认为起点很可能是 spring-messaging 中的AbstractMethodMessageHandler

目前有一个用于 websockets 的 SimpAnnotationMethodMessageHandler 实现,它调用 @Controllers。

您可以使用具有Message<?> 参数的@RabbisListener 方法(Spring AMQP 会将底层 Rabbit 消息转换为 spring-messaging 消息,包括标头)。然后,调用消息处理程序以路由到适当的控制器方法。

如果您想出一个健壮的实现,请考虑contributing it

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 2021-07-22
    • 1970-01-01
    相关资源
    最近更新 更多