Java 到 JRuby 到 Resque

发布于 2025-01-05 07:26:45 字数 1610 浏览 2 评论 0原文

我有一个混合 Web 应用程序,它在同一个 Tomcat 中运行 Java WAR 文件和 JRuby WAR 文件。

我们决定使用 (JRuby) Resque 作为我们的作业队列。对排队作业的调用如下所示:

Resque.enqueue(FooWorker, 111)

其中 FooWorker 是 JRuby 端定义和使用的工作器类(并包含在 JRuby WAR 文件中),当 JRuby Resque rake 任务处理来自 JRuby 端的作业时,它由 JRuby Resque rake 任务调用。队列。

我想让 Java 代码能够将任务放入 Resque 队列中,以便由 JRuby FooWorker 类进行处理。

我查看了 Tommy Cheng 的代码 https://github.com/tc /call-jruby-from-java-example

//JavaInterfaceExample.java
interface JavaInterfaceExample{
  int add(int a, int b);
}
#JrubyAdderImpl.rb
require 'java'

class JrubyAdderImpl
  include Java::JavaInterfaceExample

  java_signature 'int add(int, int)'
  def add(a, b)
    a+b
  end
end

我怀疑我的代码如下所示:

//ResqueInterfaceExample.java
interface ResqueInterfaceExample{
  int resque_enqueue_foojob(int a);
}
#JrubyResqueImpl.rb
require 'java'
require 'resque'

class JrubyResqueImpl
  include Java::ResqueInterfaceExample

  java_signature 'int resque_enqueue_foojob(int)'
  def resque_enqueue_foojob(a)
    Resque.enqueue(FooWorker, a) 
  end
end

我的 FooWorker 类位于 Rails 应用程序的展开的 war 文件目录中,文件是 app/workers/foo_worker.rb

什么我需要做什么来确保 JRuby 编译器可以访问 FooWorker 和 Resque JRuby 类才能正确编译代码?

I have a hybrid web application which runs a Java WAR file and a JRuby WAR file in the same Tomcat.

We have decided to use (JRuby) Resque as our job queue. The call to enqueue jobs looks like this:

Resque.enqueue(FooWorker, 111)

where FooWorker is a worker class defined on and used by the JRuby side (and included in the JRuby WAR file), and it is invoked by the JRuby Resque rake task when it processes a job from the queue.

I would like to give the Java code the ability to enqueue tasks on the Resque queue to be processed by the JRuby FooWorker class.

I took a look at Tommy Cheng's code at https://github.com/tc/call-jruby-from-java-example.

//JavaInterfaceExample.java
interface JavaInterfaceExample{
  int add(int a, int b);
}
#JrubyAdderImpl.rb
require 'java'

class JrubyAdderImpl
  include Java::JavaInterfaceExample

  java_signature 'int add(int, int)'
  def add(a, b)
    a+b
  end
end

I suspect that my code would look like:

//ResqueInterfaceExample.java
interface ResqueInterfaceExample{
  int resque_enqueue_foojob(int a);
}
#JrubyResqueImpl.rb
require 'java'
require 'resque'

class JrubyResqueImpl
  include Java::ResqueInterfaceExample

  java_signature 'int resque_enqueue_foojob(int)'
  def resque_enqueue_foojob(a)
    Resque.enqueue(FooWorker, a) 
  end
end

My FooWorker class sits in the exploded war file directory for the Rails app, and the file is app/workers/foo_worker.rb

What do I need to do to ensure that the JRuby compiler has access to both the FooWorker and Resque JRuby classes to compile the code properly?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

猥琐帝 2025-01-12 07:26:45

我不确定 Tomcat,但我知道使用 Jetty(另一个 servlet 容器),您可以将 jruby 代码编译成 jar 并将其放在容器的 lib 目录中。

或者查看这个项目 https://github.com/gresrun/jesque

“Jesque 是 Resque 的一个实现它与 Ruby 和 Node.js (Coffee-Resque) 实现完全互操作。”

它允许您将作业从 java 本地排队到 resque。我还没有使用过它,但看起来很有希望。

I'm not sure about Tomcat, but I know with Jetty(another servlet container), you can compile the jruby code into a jar and place it in the container's lib directory.

Or check out this project https://github.com/gresrun/jesque

"Jesque is an implementation of Resque in Java. It is fully-interoperable with the Ruby and Node.js (Coffee-Resque) implementations."

It lets you enqueue jobs natively from java to resque. I haven't used it but it looks promising.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文