我正在尝试在 Rails 应用程序中使用 Stompgem ( https://github.com/stompgem/stomp ) 和 Activemessaging ( https://github.com/kookster/activemessaging ) 来发布持久/可靠的消息(具有弹性即使订阅者在处理过程中中途崩溃)
有没有办法持续发布到一个主题有重新交付工作给任何失败/定时/错误的订阅者?
使用 stompgem 进行发布:
@client.publish("/topic/" + topic_name, data_hash.to_json, {:persistent => true})
参考:https ://github.com/stompgem/stomp/blob/dev/examples/publisher.rb
使用 activemessaging 进行主题订阅
class ProcessPublisherProcessor < ApplicationProcessor
subscribes_to :process_publisher, :ack => :client
def on_message(message)
logger.debug "ProcessPublisherProcessor received: " + message
end
end
我已经尝试建议将 :persistent => true 添加到客户端发布方法中,并将 :ack => :client 添加到订阅者中。
通过 on_message 中途终止订阅者(通过停止 ruby 进程或抛出随机异常)会导致消息不被代理重新传递(在本例中为 Activemq)。
目标:
- 可靠地发布到主题
- 订阅从主题接收消息并明确确认该消息已被消费
- 在将消息放入我选择的 DLQ(死信队列)之前,代理最多尝试重新传递 X 次。
谢谢,