首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Scala (和Java)访问DRb对象(例如Ruby )的最佳方法是什么?

从Scala (和Java)访问DRb对象(例如Ruby )的最佳方法是什么?
EN

Stack Overflow用户
提问于 2010-06-12 15:48:55
回答 1查看 766关注 0票数 3

我使用Ruby的非常简单的队列类构建了各种小脚本,并使用DRb在Ruby和DRb进程之间共享队列。如果能够使用JRuby从Scala (可能还有Java)访问这些文件,那就太好了。

我已经将Scala和JSR-223接口组合在一起来访问jruby-complete.jar。

代码语言:javascript
复制
import javax.script._

class DRbQueue(host: String, port: Int) {
  private var engine = DRbQueue.factory.getEngineByName("jruby")
  private var invoker = engine.asInstanceOf[Invocable]
  engine.eval("require \"drb\" ")
  private var queue = engine.eval("DRbObject.new(nil, \"druby://" + host + ":" + port.toString + "\")")

  def isEmpty(): Boolean = invoker.invokeMethod(this.queue, "empty?").asInstanceOf[Boolean]
  def size(): Long = invoker.invokeMethod(this.queue, "length").asInstanceOf[Long]
  def threadsWaiting: Long = invoker.invokeMethod(this.queue, "num_waiting").asInstanceOf[Long]
  def offer(obj: Any) = invoker.invokeMethod(this.queue, "push", obj.asInstanceOf[java.lang.Object])
  def poll(): Any = invoker.invokeMethod(this.queue, "pop")
  def clear(): Unit = { invoker.invokeMethod(this.queue, "clear") }
}
object DRbQueue {
  var factory = new ScriptEngineManager()
}

(它大致符合java.util.Queue接口,但我没有声明接口,因为它没有实现元素和peek方法,因为Ruby没有提供它们。)

这方面的问题是类型转换。JRuby可以处理Scala的字符串--因为它们是Java。但是如果我给它一个Scala或Long,或者其他Scala类型之一(列表、Set、RichString、数组、符号)或其他自定义类型。

这似乎是不必要的麻烦:肯定有一种更好的方法来实现RMI/DRb互操作,而不必使用JSR-223 API。我可以这样做,这样have方法就可以将对象序列化为JSON字符串,并且只接受具有toJson方法的对象的结构类型。然后,我可以编写一个Ruby包装类(或者仅仅是monkeypatch队列)来解析JSON。

继续从Java/Scala访问DRb有什么意义吗?安装一个真正的消息队列会更容易吗?(如果是的话,有关于基于JVM的轻量级MQ的建议吗?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-07-01 01:32:19

安装企业消息队列是有价值的,因为DRB和ruby不是排队的技术。

在我看来,你在这里创造了一笔高科技债务。

如果你想坚持走同一条路,你可以使用他们放弃的twitter排队。

我认为Java世界的JMS中有大量的队列可用。

如果您编写了DRB服务器,那么即使执行一个实现队列接口的数组,也已经足够了,这是非常简单的!然后适当地缩放http://www.java-tips.org/java-se-tips/java.lang/array-based-queue-implementation-in-java.html

在我看来,坚持已被证实的企业技术,而不是那些未经证实的技术,我很难做到这一点。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3029212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档