我不确定这是否合理,但是通过消息(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这样的静态语言,这要困难得多,我正在考虑使用一些表达式语言。
但是,我不确定这个想法听起来是否奇怪,请随意分享您的想法。
最佳答案
我不建议在消息有效负载内表示逻辑。存在代码注入(inject)问题的可能性,并且从SCM的角度来看,在一般自由格式的消息内部表示逻辑似乎会更加困惑,等等。
您可以使用路由键在更高级别上表示逻辑(在某种程度上)。
即您可以在路由键中包含通用类型,然后您的代码可以解析路由键并相应地处理逻辑。这样,消息会影响逻辑,但本身不包含实际逻辑。
关于java - 在消息中发送一段代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24472465/