gpt4 book ai didi

java - RabbitMQ 的 Servlet 端点

转载 作者:行者123 更新时间:2023-11-30 08:11:36 25 4
gpt4 key购买 nike

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

我找到了一些如何使用 Spring 执行此操作的教程,但我不想仅仅因为这个而重写整个应用程序。也许有某种方法可以只使用我缺少的 Spring AMQP...

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

最佳答案

我认为通过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”,当您拥有此“get”功能时,您可以创建匿名和自动删除队列,并将其绑定(bind)到交换与routingkey= “room4”,然后将此队列消耗的消息重定向到使用相同 key 连接的所有 Websocket。

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

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

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

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

希望对你有帮助

关于java - RabbitMQ 的 Servlet 端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30321010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com