RabbitMQ的Servlet端点

时间:2015-05-19 08:56:32

标签: java servlets rabbitmq stomp sockjs

我有一个简单的可分发聊天应用程序。它适用于通过REST API servlet暴露的MySQL后端。客户端使用带有SockJS和STOMP协议连接到RabbitMQ服务器的websockets以HTML / JS编写。我想通过java后端公开RabbitMQ服务器,有没有办法用servlet做到这一点?

我找到了一些如何用Spring做这个教程的教程,但我不想因为这个而重写整个应用程序。也许只有一些方法可以使用Spring AMQP我错过了......

我设法使用https://github.com/projectodd/sockjs-servlet创建SockJS servlet端点,但是在部署应用程序时,服务器端点是构建一次,当时我什么都不知道。我想基于URL构建端点(例如localhost / ws / room-4为ROOM id#4创建端点,您可以在其中侦听传入的消息)。

1 个答案:

答案 0 :(得分:1)

我认为通过java后端应用程序使用RMQ是正确的。这样你就可以从rabbitmq

中删除STOMP插件

现在,当您阅读时,可以使用spring-framework轻松完成,因为它包含http://projects.spring.io/spring-amqp/并且还包含许多可以帮助您的功能,例如: DeferredResult请阅读: https://spring.io/blog/2012/05/07/spring-mvc-3-2-preview-introducing-servlet-3-async-support 我真的建议你读一下Spring。

无论如何,如果您想手动执行此操作:

假设你有一个像yourservlet/createroom= “room4”这样的函数“创建空间”,你可以创建匿名和自动删除队列,并将其绑定到routerkey =“room4”,然后重定向消息将此队列消耗给使用相同密钥连接的所有websocket。

例如,如果你想使用tomcat websocket(这里是一个例子https://gist.github.com/chitan/3063774),你可以这样做:

 private class MyMessageInbound extends MessageInbound{
        WsOutbound myoutbound;
        String rouutKey; 

您使用相同的路由键注册websocket。 (routing-key可以是roomName)

我在我的项目中使用了类似的情况(不是聊天,而是相似)。

希望有所帮助