How do I use transactions with Stomp and ActiveMQ (and Perl)?我试图用ActiveMQ替换一些定制的消息队列,我需要从Perl与他们(很多)交谈。 ActiveMQ提供了一个Stomp接口,而Perl具有Net :: Stomp,所以看起来应该没问题,但事实并非如此。 即使我通过Stomp发送了BEGIN命令,使用SEND发送的消息也会立即发布,并且即使我中止了事务,也不会发生任何事情。 我找不到任何明确的答案,表明不可能,不可能或存在相关的配置。 而且,Stomp似乎不是检查服务器错误响应的好协议。 我不走运吗? 顺便说一句,问Perl / ActiveMQ / Stomp问题的最佳地点是ActiveMQ用户论坛,因为许多Perl-Stomp人士都在那里闲逛。 STOMP事务的技巧是确保您发送的每条消息或发出的每条确认都包括事务ID头。请参阅STOMP协议的事务处理部分。 原因是,如果您的客户端是多线程的,那么使用STOMP可以同时进行许多事务-以及一些未处理的操作。 您必须将确认包装在事务中。 用伪代码(或伪STOMP)可以是:
我已经使用PHP驱动程序进行了此工作(在传入框架对象进行确认时,修补中止调用以使用事务ID)。 不幸的是,在重新传递四个消息之后,客户端停止了。至少这发生在我身上。 看看Net :: Stomp :: Receipt。它是Net :: Stomp的子类,可实现Stomp协议中的"退回收据",并允许您确保正确接收消息,否则中止交易。 |