在邮件中发送一段代码

时间:2014-06-29 01:42:37

标签: java python jms message amqp

我不确定这是否合理,但在某些情况下通过消息(AMQP,JMS,ZeroMQ)发送一段代码非常有意义。

我们通常将消息用作普通数据,这是由基元组成的信息(例如,整数,长整数,字符串......)。普通数据的问题是它不能代表逻辑。例如,我有一条消息,如

class OperationMsg {
     String conditionA;
     String conditionB;
     String conditionC;
}

服务A将此消息发送给其他服务,以指示他们执行某些操作。操作流程不仅由封装在消息中的条件决定,还由服务当前具有的上下文决定。然后每个服务都必须硬编码:

if (msg.conditionA == something && self.context.someContext == something) {
   doSomethingA();
} else if (msg.conditionB == somethind && msg.conditionA != something && self.context.sometContext == something) {
   doSomethingB();
}

如果我们想要将这些代码与服务分离,我们必须使用一些访问者模式(GoF),但是,这是不可能的,因为我们通过消息进行通信,并且每个服务可能不在同一个进程或机器中。

所以我想我们是否可以在消息中发送类似访问者模式但通过消息的代码。对于像Python这样的动态语言,因为eval()函数是可行的,对于像Java这样的静态语言,它更难,我正在考虑使用一些表达式语言。

但是,我不确定这个想法是否听起来很奇怪,请您自由分享您的想法。

1 个答案:

答案 0 :(得分:3)

我不建议在消息有效负载内部表示逻辑。存在代码注入问题的可能性,从 SCM 角度来看,在一般自由格式的消息中表示逻辑似乎更为麻烦。 / p>

您可以使用路由键在更高级别表示逻辑 - 到某一点。

即。您可以在路由密钥中包含常规类型,然后您的代码可以解析路由密钥并相应地处理逻辑。这样,消息就会影响逻辑,但本身并不包含实际逻辑。