gpt4 book ai didi

ruby - Java 到 JRuby 到 Resque

转载 作者:行者123 更新时间:2023-12-02 17:50:17 26 4
gpt4 key购买 nike

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

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

Resque.enqueue(FooWorker, 111)

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

我想让 Java 代码能够将任务排入 Resque 队列,由 JRuby FooWorker 类处理。

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

//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 应用程序的 exploded war 文件目录中,该文件是 app/workers/foo_worker.rb

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

最佳答案

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

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

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

它允许您从 java 中本地排队作业以重新请求。我没用过,但看起来很有前途。

关于ruby - Java 到 JRuby 到 Resque,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9283203/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com