完成此类任务的最佳方法是使用像RabbitMQ 这样的消息代理。它提供对 Java、Python、PHP 等的支持。您可以在使用不同语言实现的进程之间发送消息(例如 json 消息,或任何其他格式)。 Here你可以找到用不同语言实现的教程。
RabitMQ
RabbitMQ 是一个消息代理。它位于生产者和消费者之间。生产者是生产消息并将这些消息发布到 RabbitMQ 中的队列的组件。 RabbitMQ 获取这些消息并按照您定义的路由规则将这些消息传递给消费者。消费者是等待接收消息并运行任务的任务运行者。这是一个简单的生产者,它连接到 RabbitMQ,发送一条消息,然后退出。
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;
public class Send {
private final static String QUEUE_NAME = "hello";
public static void main(String[] argv) throws java.io.IOException {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
String message = "Hello World!";
channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
System.out.println(" [x] Sent '" + message + "'");
channel.close();
connection.close();
}
}
这里我们有一个简单的 java 消费者,我们让它运行以监听消息。你不限于java。您可以使用任何有 RabbitMQ 库的语言(Python、PHP、C#、JavaScript 等):
import com.rabbitmq.client.*;
import java.io.IOException;
public class Recv {
private final static String QUEUE_NAME = "hello";
public static void main(String[] argv) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body)
throws IOException {
String message = new String(body, "UTF-8");
System.out.println(" [x] Received '" + message + "'");
}
};
channel.basicConsume(QUEUE_NAME, true, consumer);
}
}
运行它:
$ javac -cp rabbitmq-client.jar Send.java Recv.java
$ java -cp .:commons-io-1.2.jar:commons-cli-1.1.jar:rabbitmq-client.jar Send
$ java -cp .:commons-io-1.2.jar:commons-cli-1.1.jar:rabbitmq-client.jar Recv
注意:您需要 rabbitmq-client.jar 及其对类路径的依赖项。