我需要从每个MySQL操作上实时运行(并且对时间敏感)的Java应用程序发出node.js服务器(任何websocket服务器都会这样做)的信号。
我正在寻找最好的选择,到目前为止提出:
a)MySQL上的触发器
然后,MySQL会自己发信号通知websocket服务器将更新推送到客户端。
b)Java App呼叫服务器
Java会发信号通知node.js / whatever将新数据推送到客户端。
我认为让MySQL处理信令node.js的工作量会对Java App更有效(时间敏感)。
是否有第三种选择?它是否比下面描述的更好?
答案 0 :(得分:2)
您应该使用Redis或ZeroMQ之类的东西来创建Java和Node之间的通信通道。 Java将通过该通道发送消息,Node将拦截它并推送到MySQL,它将在完成后响应。
对我来说似乎很好,因为Java不会等待任何响应,因为Node和MySQL之间的异步通信(带有回调和触发器)。
答案 1 :(得分:0)
首先,您必须确定哪个实体/活动在逻辑上生成信号。它真的是MySQL上的插入或Java应用程序执行的插入。是否还有其他应用程序修改MySQL数据库?如果没有,我会亲自将所有事件发布到node.js服务器将侦听的队列(另一个进程)。使用具有Java和Node.js客户端的队列在这里会有所帮助。这样,数据库上的负载将被最小化,并且体系结构将独立于数据库/应用程序(假设您正在从使用MySQL的所有应用程序向队列发布更新)。
一个这样的队列的例子是Beanstalkd。