问题标签 [stomp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1451 浏览

permissions - 了解 Rabbitmq 权限

我正在尝试建立一个发布/订阅系统。我的技术总监建议在分配给我的项目中使用 Rabbitmq 和 STOMP。

在这个系统中,我希望在服务器端创建交换并传递给用户订阅。我希望用户订阅交换并在信息可用时接收信息。我不希望客户端能够订阅任意交换(或主题交换的路由密钥,我不确定我要使用什么系统)。

例如,如果有人为公司的 widgetInk 工作,当他们登录我们的网站时,他们会收到与 widgetInk.whatever 交换和 AllUsers.whatever 交换的连接,但仅此而已。如果客户端尝试订阅其他内容,他们会收到错误消息。

我已经阅读了所有的 RabbitMQ 教程,并查看了他们的部分内容。我找到了这篇关于访问控制的基本文章,但是现在已经阅读了三遍我仍然不知道rabbitmq是否适合我的要求。

可以根据我的要求配置 Rabbitmq 吗?我可以使用哪些资源来了解 Rabbitmq 的权限系统?有没有人建立或使用过这样的系统?切换到 ZeroMQ 或 ActiveMQ 是否符合我的最大利益?

0 投票
2 回答
5302 浏览

javascript - RabbitMQ + Web Stomp 和安全性

RabbitMQ + Web Stomp 很棒。但是,我有一些我希望以只读或只写方式保护的主题。

似乎保护这些的唯一机制是使用rabbitmqctl。我可以创建一个虚拟主机、一个用户,然后应用一些权限。然而,这就是 Stomp 和 Rabbit 实现开始崩溃的地方。

主题形式为:stomp 中的 /topic/blah,它使用路由键“blah”路由到 Rabbit 中的“amq.topic”。似乎没有办法为路由键设置权限。似乎:

是我能做的最好的,这仍然是“所有”的话题。我也研究过交换,但在 javascript 中无法动态定义这些。

我在这里错过了什么吗?

参考:http ://www.rabbitmq.com/blog/2012/05/14/introducing-rabbitmq-web-stomp/

0 投票
1 回答
640 浏览

c# - Apollo Stomp ActiveMQ 创建无效的临时目的地名称

使用代理在 Windows 7 32 位上作为服务运行的 C# 框架 4.0,我在稳定版和开发版上都看到以下错误。

这样做的最终结果是我无法使用临时队列作为客户端上的调用阻塞,并且在我可以响应异常之前会话超时。

0 投票
1 回答
5158 浏览

php - PHP Stomp:读取队列中的所有消息

我需要使用 PHP 在 ActiveMQ 队列中查找特定消息并将其删除。

AFAIK 这样做的唯一方法是读取当前排队的所有消息并确认我感兴趣的一条消息。(Stomp::ack 的 PHP 手册中的示例或多或少做同样的事情,他们没有t 读取所有消息,但只确认匹配的消息)。

所以,我写了这段代码(显然,这只是相关部分):

根据我的逻辑,这应该可行。在运行代码时,尽管检查了更多帧,但仅读取了一条随机消息。

下一帧似乎只有在我们当前正在读取的帧已被确认时才准备好。(当我手动确认所有消息时,while循环按预期工作,所有消息都被处理。

有谁知道如何在不确认所有消息的情况下从队列中获取完整的消息集?我可以确认所有这些,然后将我不感兴趣的那些放回队列中,但是这种查找单个消息的效率已经很低的方式变得更加低效。

0 投票
1 回答
2795 浏览

javascript - RabbitMQ 通过 web 使用 stomp 适配器

我刚刚在我的 rabbitmq 服务器中启用了 stomp 插件。

我整天都在尝试运行这个例子https://github.com/rabbitmq/rabbitmq-web-stomp-examples(和其他),我总是得到:

“Opening Web Socket ...”我收到连接服务器的请求(我可以在兔子日志中看到它)

过了一会儿,客户断开连接说:

注意:我尝试通过telnet订阅队列,一切正常,但不适用于 Sockjs。

1)谁能帮助我?

2)我注意到在每个示例中,他们总是将 /stomp 添加到 url。这是为什么?我是否必须在 rabbit stomp 适配器上配置一些特殊的东西,还是像插件一样完成?

我已经使用这个“教程”安装了插件: http ://www.rabbitmq.com/stomp.html

基本上我运行这个命令:rabbitmq-plugins enable rabbitmq_stomp

3)在这个例子中,我试图用 http:// 替换 ws:// 但答案完全相同,但更快地回答“丢失的连接”。我在firebug控制台中也注意到它试图连接的url是:(http://localhost:61613/stomp/infohttp://localhost:61613/infows://localhost:61613/info或ws://localhost:61613/stomp/info取决于给定的url)

4)在另一个例子中,它发生了一些奇怪的事情。如果我让 http 出现“丢失连接”的答案。如果我将其更改为 ws,它就会开始给我带来跨域问题。

我将不胜感激任何帮助。

0 投票
1 回答
1046 浏览

node.js - Web to rabbitmq - stomp web 插件 vs nodejs amqp 插件

我试图决定我是否会通过以下方式从网络连接到rabbitmq:

解决方案 1. Rabbitmq stomp 插件 + Rabbitmq web stomp 插件 + Sockjs

解决方案2. Rabbitmq + nodejs 通过 amqp nodejs 插件

设想:

a) 我有一个订阅队列的 Web 应用程序 b) 我有一个正在写入该队列的 Java 应用程序 c) 我有一个浏览器打开了解决方案 1,另一个浏览器打开了解决方案 2

我测试了两者,发生的情况是:

当我发送连续的 10.000 条消息时,解决方案 2 比解决方案 1 快得多。解决方案 2 永远不会失去连接。解决方案 1 大多数情况下会在随机时间(在收到每条消息之前)断开连接。

问题:

  1. 我可以在解决方案 1 中更新任何限制配置吗?

  2. 解决方案1的问题是由于:Sockjs?跺脚插件?跺脚网络插件?他们全部?我不明白为什么如果我在中间添加 nodejs 比 rabbitmq 中的嵌入式 erlang 插件(rabbitmq stomp /rabbitmq web stomp 插件)要快得多。

    注意:stomp 插件或 stomp web 插件永远不会消失。它总是继续监听他们的端口。

  3. 我的简单解释是浏览器无法处理如此多的顺序消息,而 nodejs 可以很好地处理这一点,而 rabbitmq web stomp 则不能。但也只是猜测。这个对吗?如果是这样,我该如何解决?

  4. 解决方案 1 不应该比解决方案 2 更好(延迟方面)?

注意:如果我在发布者中添加每条消息发送之间的 5 毫秒差异,则此问题将消失,并且解决方案 1 的执行与解决方案 2 类似(对于 10.000 条消息)。

感谢您的任何回答。

此致,

爱德华多

0 投票
1 回答
107 浏览

javascript - AciveMQ 演示吞下消息

当我尝试 ActiveMQ (http://localhost:8161/demo/websocket/) 的 websocket 聊天演示时,似乎并非所有消息都在两个不同的浏览器实例之间传输。出于某种原因,只有每第二条消息都会发送到其中一个浏览器。

有人对此有解释吗?这是我需要配置的东西吗?

编辑:也许我应该补充一点,我使用 stomp 作为默认设置的有线协议(只是将配置文件更改为使用 websockets)。

Edit2:按照http://www.jmesnil.net/stomp-websocket/doc/给出的示例时,我找不到任何行为差异。但是,我注意到一个有趣的效果:当使用 3 个客户端实例时,我可以观察到发送客户端收到了第一条消息,第二个客户端(而不是其他任何一个)收到了第二条消息,并且收到了第三条消息在第三个客户端。我原以为所有客户端都会同时收到消息。

0 投票
3 回答
2677 浏览

rabbitmq - Rabbitmq + 带有 rpc 的 web stomp 插件 - 回复

我正在尝试使用 RabbitMQ 的 STOMP 适配器执行 RPC。作为客户端库,我使用 STOMP over WebSocket (https://github.com/jmesnil/stomp-websocket/) 库。

从文档(http://www.rabbitmq.com/stomp.html#d.tqd)我看到我必须设置回复标题。我已经通过指定类似“reply-to:/temp-queue/foo”之类的东西来做到这一点,并且我在服务器端客户端(node-amqp)中看到replyTo标头设置正确(例如:replyTo:'/reply -queue/amq.gen-w2jykNGp4DNDBADm3C4Cdx')。仍然在我的服务器端客户端中,我可以通过将消息发布到“/reply-queue/amq.gen-w2jykNGp4DNDBADm3C4Cdx”来回复消息。

但是,如何在发起 RPC 调用的客户端代码中得到这个回复?文档指出“SEND 和 SUBSCRIBE 帧不得包含 /temp-queue 目标 (...) 对回复队列的订阅是自动创建的。”

那么,如何订阅回复队列呢?如何获得 RPC 调用的结果?

提前致谢。

0 投票
3 回答
3075 浏览

java - ActiveMQ 向 StompConnection 注册监听器

我在http://svn.apache.org/repos/asf/activemq/trunk/assembly/src/release/example/src/StompExample.java使用示例的变体从队列接收消息。我正在尝试做的是继续收听队列并在收到新消息后执行一些操作。问题是我找不到将侦听器注册到任何相关对象的方法。我试过类似的东西:

但这不起作用,因为几秒钟后会发生超时(java.net.SocketTimeoutException: Read timed out)。我能做些什么来无限期地听这个队列吗?

0 投票
1 回答
1498 浏览

php - 用于 ActiveMQ + WebSockets 的 PHP Stomp 客户端库

我已经安装了支持 WebSocket 的 ActiveMQ,并且能够让 JS 演示工作。我现在面临的问题是 PHP Stomp 库不能与 WebSocket URI 一起使用,所以当我尝试时:

我得到:

连接失败:代理 URI 方案无效

关于如何通过 PHP 发送消息的任何想法?我是不是从错误的角度看待这个问题。我应该尝试常规的 PHP 套接字函数来连接到 ActiveMQ 吗?

谢谢。