当前位置: 首页 > 知识库问答 >
问题:

使用EventMachine消费表

司英彦
2023-03-14

我的Ruby项目中有一个模型重发,它包含内容和状态列。

使用EventMachine使用状态为0的所有记录的最佳/最快方式是什么?

我想创建一个简单的worker,它尝试在每个时段(比如每5分钟)查找status==0的记录

我对EventMachine还是新手,找不到那么多关于如何处理DB的例子。

到目前为止,我做了如下工作,但不确定这是否是最好的实现:

$ROOT_PATH ||= File.expand_path("#{File.dirname __FILE__}")

require "rubygems"
require 'eventmachine'
require 'em-http'

require "#{$ROOT_PATH}/app/models/resend.rb"


EventMachine.run do
  EM.add_periodic_timer(5) do
    Resend.active.each do |msg|
        http = EventMachine::HttpRequest.new($RECEIVER_URL).post :body => {:message => msg.content }
        http.callback { msg.update_status! }
    end
  end
end

任何帮助都将不胜感激

共有2个答案

易祯
2023-03-14

您需要您的DB宝石的event版本。它们通常有前缀em-。如果它是一个mongoDB有'em-mongo'宝石。对于MySQL,我听说最好的选择是在mysql2 gem中内置异步模块

孟俊发
2023-03-14

这种方法的问题是,在该范围内,每次重发都会触发一个调用,并且每五秒钟触发一次。至少您需要将这些记录标记为正在处理,这样您就不会重复工作。如果处理其中任何一个需要5秒钟以上,您将有重叠呼叫。

您真正需要的是某种作业队列,如beanstalkd或delayed_作业。

 类似资料:
  • EventMachine 是一个基于 Reactor 设计模式的、用于网络编程和并发编程的框架。Reactor 模式描述了一种服务处理器,它接受事件并将其分发给已注册的事件处 理。这种模式的好处就是清晰的分离了时间分发和处理事件的应用程序逻辑,而不需引入多线程来把代码复杂化。 EventMachine提供了一个网络套接字和隐藏底层操作的高层接口。EventMachine: 拥有极高的可伸缩性、性能

  • 在我们的spring boot应用程序中,我们注意到Kafka消费者偶尔会在prod env中随机消费两次消息。我们在PCF中部署了6个实例和6个分区。我们发现在同一主题中收到两次具有相同偏移量和分区的消息,这会导致重复,对我们来说是业务关键。我们在非生产环境中没有注意到这一点,在非生产环境中很难复制。我们最近转向Kafka,但我们无法找到根本问题。 我们使用的是spring cloud stre

  • 我有一个spring boot后端,我想为它实现一个SSEendpoint。我想使用基于Xamarin表单的应用程序使用这个endpoint。 我设法为双方实现了一些例子,但是,我没有在应用程序上收到任何消息。 对于后端部分,我实现了以下示例: 注意:我特意以达到默认30秒超时的方式实现它。使用postman调用此方法,它将加载所述30秒并同时显示所有已发送的消息: 在我的应用程序部分,我使用了S

  • 我已经建立了一个由3个节点组成的AWS集群。我修改了节点的/etc/hosts文件,看起来像这样 当我从其中一个节点运行命令时 bin/kafka-console-consumer.sh --bootstrap-server kafka1:9092 --topic first_topic --from-start 它可以工作,但是当我用ip替换主机名并用下面的命令运行它时 bin/kafka-co

  • 我有一个管理Web应用程序位于远程服务器上。这个应用程序是使用MEAN堆栈编写的,我有一个连接到网络应用程序所需的所有RESTful路由的列表。 我正在编写一个Java客户端应用程序,它需要从这个管理应用程序发送和接收数据。如果我有服务器的IP地址和REST路由,如何将客户端连接到web应用程序? 我想我需要提供一个到服务器和RESTAPI文件的URL连接,然后只需调用路由函数,如和。

  • 我有一个简单的Kafka设置。生成器正在以较高的速率向单个分区生成具有单个主题的消息。单个使用者正在使用来自此分区的消息。在此过程中,使用者可能会多次暂停处理消息。停顿可以持续几分钟。生产者停止产生消息后,所有排队的消息都将由使用者处理。生产者产生的消息似乎不会立即被消费者看到。我使用的是Kafka0.10.1.0。这里会发生什么?下面是使用消息的代码部分: 代理上的所有配置都保留为kafka默认