Jay*_*dse 1 jrubyonrails resque jruby-java-interop
我有一个混合Web应用程序,它在同一个Tomcat中运行Java WAR文件和JRuby WAR文件.
我们决定使用(JRuby)Resque作为我们的工作队列.对入队作业的调用如下所示:
Resque.enqueue(FooWorker, 111)
Run Code Online (Sandbox Code Playgroud)
其中FooWorker是JRuby端定义并使用的工作类(并包含在JRuby WAR文件中),当JRuby Resque rake任务处理队列中的作业时,它将被调用.
我想让Java代码能够将要由JRuby FooWorker类处理的Resque队列上的任务排队.
我在https://github.com/tc/call-jruby-from-java-example上查看了Tommy Cheng的代码.java文件
//JavaInterfaceExample.java
interface JavaInterfaceExample{
int add(int a, int b);
}
Run Code Online (Sandbox Code Playgroud)
和ruby文件
#JrubyAdderImpl.rb
require 'java'
class JrubyAdderImpl
include Java::JavaInterfaceExample
java_signature 'int add(int, int)'
def add(a, b)
a+b
end
end
Run Code Online (Sandbox Code Playgroud)
我怀疑我的代码看起来像:java文件
//ResqueInterfaceExample.java
interface ResqueInterfaceExample{
int resque_enqueue_foojob(int a);
}
Run Code Online (Sandbox Code Playgroud)
红宝石文件
#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
Run Code Online (Sandbox Code Playgroud)
我的FooWorker是一个类,它位于rails app的爆炸war文件目录中,文件是app/workers/foo_worker.rb
我需要做些什么来确保jruby编译器可以访问FooWorker和Resque JRuby类来正确编译代码?
我不确定Tomcat,但我知道Jetty(另一个servlet容器),你可以将jruby代码编译成jar并将它放在容器的lib目录中.
或者查看这个项目https://github.com/gresrun/jesque
"Jesque是Java中Resque的一个实现.它可以与Ruby和Node.js(Coffee-Resque)实现完全互操作."
它允许您将作业本地从java排队到resque.我没有用它,但看起来很有希望.
| 归档时间: |
|
| 查看次数: |
545 次 |
| 最近记录: |