我正在尝试用ActiveMQ替换一些定制的消息队列,我需要与他们(很多)从Perl交谈。 ActiveMQ提供了一个Stomp接口,而Perl有Net :: Stomp,所以这看起来应该没问题,但事实并非如此。

即使我通过Stomp发送BEGIN命令,也会立即发布使用SEND发送的消息,如果我中止该事务,则不会发生任何事情。

我找不到任何明确的答案,表明它是不可能的,这是可能的,或者说有相关的配置。 此外,Stomp似乎不是一个很好的协议来检查服务器的错误响应。

我运气不好吗?

===============>>#1 票数:3

BTW问题Perl / ActiveMQ / Stomp问题的最佳地点是ActiveMQ用户论坛,因为许多Perl-Stomp人都在那里。

STOMP事务的技巧是确保您发送的每条消息或您做出的每个确认都包含事务ID标头。 请参阅STOMP协议事务处理部分

这样做的原因是,如果您的客户端是多线程的,那么使用STOMP可能会同时发生许多事务 - 以及一些非事务处理操作。

===============>>#2 票数:1

您必须将确认包装在事务中。

在伪代码(或伪STOMP)中,这将是:

  • BEGIN [TRANSACTION-ID] - >发送到服务器
  • MESSAGE [MESSAGE-ID](已接收)< - 从服务器收到
  • ACK [MESSAGE-ID] [TRANSACTION-ID] - >发送到服务器
  • COMMIT [TRANSACTION-ID] - >发送到服务器

我已经使用PHP驱动程序(在我传入一个帧对象来确认时修补中止调用以使用事务ID)。

不幸的是,在重新传送四条消息后,客户端停止了。 至少这件事发生在我身上。

===============>>#3 票数:1

看看Net :: Stomp :: Receipt 它是Net :: Stomp的子类,它从Stomp协议实现“返回收据”,并允许您确保正确接收消息,否则中止事务。

  ask by rjbs translate from so

未解决问题?本站智能推荐:

1回复

如何使用net :: Stomp和receive_frame进行交易

我正在使用Net :: Stomp调整一些现有代码,从能够处理单个主题到能够处理多个主题。 谁能告诉我这种方法是否可行? 现在无法正常工作,因为它在期望收到交易收据的地方,正在收到有关另一个主题的第一条消息。 我想知道我是否只是在尝试修复它之前就树错了树皮。 工作流程如下所示:
1回复

stomp + activemq + perl +无法sysread():EOF

我有一个简单的踩脚脚本连接到activemq,当我运行脚本时,出现以下错误“ cannot sysread():EOF” Perl脚本代码: 有人可以让我知道我在做什么错吗? 我看到了类似的帖子,但随后却没有看到关于该帖子的回复。 问题在$ stomp-> connect
1回复

使用Net :: Stomp :: Client发送二进制消息

我需要使用perl库Net::Stomp::Client将二进制消息发送到Message Broker。 但是,每当我使用send或send_with_receipt方法发送消息时,该消息就会作为文本消息接收。 我在服务器中使用ActiveMQ ,当我打电话给消耗时,收到的消息是TextMe
1回复

使用Net :: Stomp的Perl到Java Active MQ消息传递

我正在尝试使用Perl的Net :: Stomp向Active MQ主题发送消息。 另一方面,Java客户端监视主题并从中获取消息。 Active MQ基于Spring框架,我在Spring config.xml中定义了以下内容 从Perl发送的消息根本没有被另一端的Java客户端接
1回复

Perl生产者连接到ActiveMQ服务器时出错

我正在尝试Perl生产商与ActiveMq进行交谈。 请找到我尝试过的代码。 它给我一个错误“ * Net :: STOMP :: Client :: IO :: receive_data():无法sysread():EOF” ** 调试后,错误在$stomp->connect(
2回复

使用STOMP引用activemq

我正在使用Stomp消息传递,并已在我的客户端/浏览器代码中订阅了一个主题: 我正在使用将消息发送到activemq主题的骆驼路线: 我都尝试过: 和: 两者都只是在activemq中创建一个主题,然后将消息排队。 他们永远不会到达客户。 对我来说,这意味着客户
2回复

使用stomp和activemq.prefetchSize = 1进行activemessaging

我遇到的情况是,我有一个带有2个队列Q1和Q2的单个activemq代理。 我有两个使用activemessaging的基于ruby的消费者。 我们称它们为C1和C2。 两个使用者都订阅每个队列。 订阅每个队列时,我将设置activemq.prefetchSize = 1。 我还要设置
1回复

ActiveMQ-使用选择器进行STOMP订阅失败

客户端设置,以在STOMP订阅上实现选择器。 订阅返回一条记录到框架控制台的消息,例如: 消息是否由于选择器而被过滤掉了? 我的选择器的语法? 将语法更改为以下内容也不起作用。 在这种情况下,根本没有返回任何消息。 我想念什么?
1回复

使用PHP / Stomp客户端进行故障转移的ActiveMQ

这是目标:一个使用Stomp连接到ActiveMQ故障转移群集(主/从)的PHP应用程序。 这些是版本: ActiveMQ 5.7 PHP践踏1.0.5稳定 PHP 5.4.4-14 + deb7u14(CLI) 这是设置: 2台带有Active
3回复

使用ActiveMQ / Stomp在PHP和Java之间进行通信

背景 我有两个服务需要通过消息队列相互通信。 一个是用PHP编写的遗留服务,另一个是Java。 不久之后,PHP服务将用Java重写。 他们彼此通信的当前方式是写入共享数据库,其他服务轮询。 这就是我试图摆脱并替换为消息队列。 问题 我现在正在进行的通信是从PHP服务到