序列化的问题,已经通过定义一个作业消息来陈述了,这个消息包含作业Java类的头信息,作业序列化参数和序列化类型.有关参数形象化的一小部分内容,通过一个人眼可识别的字符串,也随消息一起发送了. Palermo已经通过支持插件和去插件的方式,对系统进行不同的序列化,同时,包含一个基于JSON的序列化转换器.但是,默认的序列化技术是使用JBoss Serialization.只有作业的参数被序列化,并发送给工作者,作业类的字节码必须在工作者的class path中可用,以便正确执行作业.
Palermo的整个逻辑已经在Clojure编程语言中实现,但是,多亏Clojure Java inter-op特性,它可以在java代码或其他任意基于JVM的语言中使用.由于Palermo工作者线程在JVM中运行,它们从底层的操作系统中被隔离出来.像Resque工作者那样,集成在OS之中,很难实现,但是某种程度的集成,在可能的情况下,已经尝试过,如,为关联到Palermo工作者的RabbitMQ消费者的身份标识,使用进程标识符.一个命令行的接口也已经实现了,所以,新的工作者,通过脚本和使用者,可以很简单的启动. 解决方案的最后一个组件是Palermo 系统中运行的一个web接口。 这只是一个使用了Palermo 类库自检特性的简单的web应用,它让人们更容易理解Palermo 系统的运行机制。 这个接口是Resque web接口的复制,在管理交换、队列、工作者方面,它可以作为RabbitMQ 通用接口的替代者。 通过Palermo 类库,web接口提供的所有功能可以在任意java代码中进行使用。 考虑到所有之前我们能想到的, Palermo 只是薄薄的一层,它建立在一个特定的 RabbitMQ设置的顶部,并被封装成一个可重用的作业处理使用模式的实现类库。 相同的方法可能适用于不同的使用模式,这些模式使用 RabbitMQ作为底层引擎,这样可以在写入非特定应用程序的代码、处理设置和由 RabbitMQ特定配置而引入其余的复杂性方面节省时间。
|