问题标签 [activemessaging]

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 投票
4 回答
1757 浏览

ruby-on-rails - 在 Rails 中执行大量异步 IO 绑定操作

我正在开发一个定期需要执行大量 IO 绑定操作的 Rails 应用程序。这些操作可以异步执行。例如,对于每个用户,系统每天需要查询 Salesforce.com 以获取用户当前正在跟踪的帐户(公司)列表。这会导致大量(可能 > 100k)的小查询。

我们当前的方法是将 ActiveMQ 与 ActiveMessaging 结合使用。我们的每个用户都作为不同的消息被推送到队列中。然后,消费者将用户从队列中拉出,查询 Salesforce.com 并处理结果。但是这种方法给了我们可怕的性能。在单个轮询进程中,我们一次只能处理一个用户。因此,Salesforce.com 查询变为序列化。除非我们实际上运行数百个轮询器进程,否则我们无法接近饱和运行轮询器的服务器。

我们正在寻找 EventMachine 作为替代方案。它的优势是允许我们在单个 EventMachine 进程中同时启动大量 Salesforce.com 查询。因此,我们的服务器得到了很好的并行性和利用率。

但是 EventMachine 有两个问题。1) 我们失去了使用 ActiveMQ/ActiveMessaging 提供的可靠消息传递。2) 我们不能轻易地定期重启我们的 EventMachine 来减少内存增长的影响。例如,使用 ActiveMessaging,我们有一个每天重新启动轮询器的 cron 作业,这可以在不担心丢失任何消息的情况下完成。但是使用 EventMachine,如果我们重新启动进程,我们可能会丢失数百条正在处理的消息。我能看到的唯一方法是在 EventMachine 之上构建一个持久性/可靠的交付层。

有没有人有更好的方法?可靠地执行大量异步 IO 绑定操作的最佳方法是什么?

0 投票
2 回答
1934 浏览

ruby - 带 stomp 和 activemq.prefetchSize=1 的 activemessaging

我有一种情况,我有一个带有 2 个队列 Q1 和 Q2 的 activemq 代理。我有两个使用 activemessaging 的基于 ruby​​ 的消费者。我们称它们为 C1 和 C2。两个消费者都订阅每个队列。我在订阅每个队列时设置了 activemq.prefetchSize=1。我也在设置 ack=client.

考虑以下事件序列:

1) 触发长时间运行作业的消息发布到队列 Q1。称它为 M1。

2) M1 被分派给消费者 C1,开始一个长操作。

3) 两条触发短作业的消息发布到队列 Q2。将这些称为 M2 和 M3。

4) M2 被派往 C2,C2 快速运行短作业。

5) M3 被分派到 C1,即使 C1 仍在运行 M1。它能够分派到 C1,因为 prefetchSize=1 是在队列订阅上设置的,而不是在连接上。因此,已经发送了 Q1 消息这一事实并不能阻止发送 Q2 消息。

由于 activemessaging 消费者是单线程的,因此最终结果是 M3 在 C1 上等待很长时间,直到 C1 完成对 M1 的处理。因此,尽管消费者 C2 处于空闲状态(因为它很快以消息 M2 结束),但 M3 没有长时间处理。

本质上,每当运行一个长 Q1 作业然后创建一大堆短 Q2 作业时,恰好有一个短 Q2 作业卡在等待长 Q1 作业完成的消费者身上。

有没有办法在连接级别而不是订阅级别设置 prefetchSize?我真的不希望在处理 M1 时将任何消息发送到 C1。另一种选择是我可以创建一个专用于处理 Q1 的消费者,然后让其他消费者专用于处理 Q2。但是,我宁愿不这样做,因为 Q1 消息很少——Q1 的专用消费者会在一天中的大部分时间处于空闲状态,占用内存。

0 投票
1 回答
633 浏览

ruby-on-rails - 如何使用多个经纪人?(Stomp、ActiveMQ 和 activemessaging)

我正在使用带有 stomp 和 activemessaging 的 ActiveMQ。我尝试按照 http://code.google.com/p/activemessaging/wiki/Configuration中的配置步骤进行操作

在我的 broker.yml 中,我有以下配置

在我的messaging.rb 中,我有...

但这似乎不起作用,消息没有在 HiWorld 队列中排队。任何帮助将不胜感激。

提前致谢。

马太

0 投票
1 回答
2769 浏览

activemq - 如何连接到在另一台机器上运行的 ActiveMQ 代理(stomp 协议、activemessaging)?

基本上,我有 2 个 MQ 在不同的机器(ubuntu)上运行。我需要他们能够相互交流。

我在机器 A 上有我的 broker.yml,像这样;

发展:

测试:

生产:

和机器 B 上的 broker.yml 像这样;

发展:

测试:

生产:

如何配置 apache-activemq/conf/activemq.xml 以便我可以让机器 A 将消息传递给机器 B。

现在,我的 activemq.xml 看起来像这样:

提前致谢!

0 投票
1 回答
581 浏览

ruby - 没有 Rails 的 ActiveMessaging——JMS 属性名称问题

我一直在试图弄清楚如何从 Ruby 发送 JMS 消息。我在 Ruby 端使用 Stomp 将 StompConnect 设置为 JMS 和 Ruby 之间的接口。

我可以使用 telnet 与队列交谈,但无法让 Ruby 正确与 StompConnect 交谈。

现在我正在尝试使用 ActiveMessaging 进行通信,并且我已经编写了自己的 poller 脚本。创建队列并发送消息后,会抛出以下错误消息:

=> 订阅 /queue/HelloWorld(由 ApplicationProcessor 处理)没有人回应“[C4043]:属性名称中使用了非法字符 - -”}' body='javax.jms.JMSException:[C4043]:使用了非法字符在属性名称中 - - 在 com.sun.messaging.jmq.jmsclient.MessageImpl.checkValidPropertyName(MessageImpl.java 在 com.sun.messaging.jmq.jmsclient.MessageImpl.checkAndSetProperty(MessageImpl 的第 757 行的顶级.java 在 com.sun.messaging.jmq.jmsclient.MessageImpl.setObjectProperty(MessageImpl.java 在 org.codehaus.stomp.jms.StompSession.copyStandardHeadersFromFrameToMessage(StompSession.java) 的顶层第 821 行在 org.codehaus.stomp.jms.StompSession.convertFrame 的第 234 行(在 org.codehaus 的第 257 行的 StompSession.java。stomp.jms.StompSession.sendToJms(StompSession.java 在 org.codehaus.stomp.jms.ProtocolConverter.onStompSend 的第 69 行的顶层(在 org.codehaus.stomp.jms 的顶层第 260 行的 ProtocolConverter.java。协议转换器。第 680 行'>运行(第 680 行的 Thread.java '>运行(第 680 行的 Thread.java '>

现在,我设置的任何属性中都没有“-”。这可能是 Stomp 库本身的问题吗?这或多或少与我最初尝试从 Ruby 与 StompConnect 交谈时遇到的问题相同。

其他人如何通过 Ruby 与 JMS 通信来解决这个问题?提前致谢!

0 投票
2 回答
1049 浏览

ruby-on-rails - ActiveMessaging 生成器问题 - 不支持 Rails 3

我对 Activemessaging 插件和 rails3 应用程序有疑问。

我的宝石文件是

之后 activemessaging 文件夹出现在供应商中

捆绑安装后,我想用生成器创建处理器

我看到了这个输出:

我错过了什么 ?我应该逐步做些什么才能使它起作用。谢谢

0 投票
0 回答
72 浏览

ruby-on-rails - 无法在 Rails 3.1 中为使用 git 作为源安装的 gem 找到生成器

首先,我使用的是 Rails 3.1。

我已经从 git 安装了 activemessaging gem。

这是在我的 Gemfile 中:

gem 'activemessaging', :git => 'git://github.com/kookster/activemessaging.git'

捆绑显示活动消息输出:

/Users/ken/.rvm/gems/ruby-1.9.2-p180@cMoM/bundler/gems/activemessaging-037532e0eb69

和 .../activemessaging-037532e0eb69 的 ls 显示

a13g_test_harness 过滤器处理器跟踪器

然而,如果我运行其中一个生成器,我会收到一条未找到生成器的消息。运行 rails g 不会显示任何用于 activemessaging 的生成器。

有谁知道为什么找不到这些生成器?

0 投票
1 回答
125 浏览

ruby-on-rails-3 - 将带有 ActiveMessaging 的 Rails 2 应用程序转换为 Rails 3,有几个问题

我目前正在将一个相当大的 Rails 2 应用程序转换为 Rails 3。该应用程序在其插件形式中使用 activemessaging。它主要与 Amazon SQS 一起用于文件上传等。我在messaging.rb 中定义了我使用的所有队列,并且有现有的处理器来处理消息。在 Rails 3 版本中,我切换到 activemesssaging gem,版本 0.9.0。除了摆脱旧插件版本之外,我还需要对现有的消息传递.rb 和处理器做些什么吗?另外现在我手动启动轮询脚本,是一样的吗?我似乎找不到太多关于 Rails 3 和 activemessaging 的信息,所以如果有人能给我我需要做的基本步骤,我将不胜感激。谢谢。

0 投票
0 回答
493 浏览

ruby-on-rails - 使用 Ruby Stomp Gem 处理持久消息和异常重新传递

我正在尝试在 Rails 应用程序中使用 Stompgem ( https://github.com/stompgem/stomp ) 和 Activemessaging ( https://github.com/kookster/activemessaging ) 来发布持久/可靠的消息(具有弹性即使订阅者在处理过程中中途崩溃)

有没有办法持续发布到一个主题有重新交付工作给任何失败/定时/错误的订阅者?

使用 stompgem 进行发布:

参考:https ://github.com/stompgem/stomp/blob/dev/examples/publisher.rb

使用 activemessaging 进行主题订阅

我已经尝试建议将 :persistent => true 添加到客户端发布方法中,并将 :ack => :client 添加到订阅者中。

通过 on_message 中途终止订阅者(通过停止 ruby​​ 进程或抛出随机异常)会导致消息不被代理重新传递(在本例中为 Activemq)。

目标:

  • 可靠地发布到主题
  • 订阅从主题接收消息并明确确认该消息已被消费
  • 在将消息放入我选择的 DLQ(死信队列)之前,代理最多尝试重新传递 X 次。

谢谢,

0 投票
2 回答
569 浏览

ruby-on-rails - Activemessaging 在我的 Rails 应用程序中导致无限循环

在我的 rails 应用程序中,activemessaing 导致了无限循环,例如,当我运行 bundle install 时,会给出一条错误消息:

“您的 Gemfile 需要相互依赖的 gem,从而造成无限循环。请删除 gem 'activemessaging' 并重试。”

有任何想法吗?

宝石文件