Ява в JRuby в Resque
У меня есть гибридное веб-приложение, которое запускает файл WAR Java и файл WAR JRuby в том же Tomcat.
Мы решили использовать (JRuby) Resque в качестве очереди на работу. Призыв ставить задания в очередь выглядит следующим образом:
Resque.enqueue(FooWorker, 111)
где FooWorker - рабочий класс, определенный и используемый стороной JRuby (и включенный в WAR-файл JRuby), и он вызывается грабельной задачей JRuby Resque при обработке задания из очереди.
Я хотел бы дать коду Java возможность ставить задачи в очередь Resque для обработки классом JRuby FooWorker.
Я посмотрел код Томми Ченга по адресу https://github.com/tc/call-jruby-from-java-example. Java-файл
//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
Я подозреваю, что мой код будет выглядеть следующим образом: файл Java
//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 - это класс, который находится в разобранном каталоге файлов war для приложения rails, и файл это app / worker / foo_worker.rb
Что мне нужно сделать, чтобы компилятор jruby имел доступ к классам FooWorker и Resque JRuby для правильной компиляции кода?
1 ответ
Я не уверен насчет Tomcat, но я знаю, что с помощью Jetty (другого контейнера сервлета) вы можете скомпилировать код jruby в jar-файл и поместить его в каталог lib контейнера.
Или проверьте этот проект https://github.com/gresrun/jesque
"Jesque - это реализация Resque в Java. Он полностью совместим с реализациями Ruby и Node.js (Coffee-Resque)".
Это позволяет ставить задания непосредственно из Java в Resque. Я не использовал это, но это выглядит многообещающим.