java - 在消息中发送一段代码

标签 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这样的静态语言,这要困难得多,我正在考虑使用一些表达式语言。

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

最佳答案

我不建议在消息有效负载内表示逻辑。存在代码注入(inject)问题的可能性,并且从SCM的角度来看,在一般自由格式的消息内部表示逻辑似乎会更加困惑,等等。

您可以使用路由键在更高级别上表示逻辑(在某种程度上)。

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

关于java - 在消息中发送一段代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24472465/

相关文章:

tomcat - Jboss vs tomcat(清除 java ee 支持的阴影)

java - install4j 多平台版本问题

java - 通过套接字手动发送 HTTP 请求

python - 帮助 python 列表理解

multithreading - oracle行争用在高吞吐量JMS应用程序中导致死锁错误

java - ActiveMQ的InactivityMonitor会看到哪些数据来检查连接可用性?

java - StreamedContent : Download is complete, 但文件为空

java - 获取具有子集的列表的 "adjacent"值的算法

python - 广泛覆盖运算符(使用 "=="进行类型检查)

python - 如何获取用户加入Facebook的日期?