В настоящее время я изучаю, как использовать RabbitMQ для планирования и отправки заданий на разные виртуальные машины. Сейчас я работаю на рабочей стороне. Работник на виртуальной машине должен выполнить некоторые тяжелые задания и вернуться к серверу, если он будет успешно выполнен.
Я провел несколько опросов на официальном API, а также здесь, пытаясь проверить, может ли он работать.
Connection connection = factory.newConnection();
final Channel channel = connection.createChannel();
channel.basicQos(10);
Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, final Envelope envelope, AMQP.BasicProperties properties, final byte[] body) throws IOException {
Thread th = new Thread() {public void run() {
try{
//do some jobs here...
synchronized (this) {channel.basicAck(envelope.getDeliveryTag(), false);}
} catch (Exception e) {
e.printStackTrace();
try {
synchronized (this) {channel.basicReject(envelope.getDeliveryTag(), false)}
} catch (IOException e1) {e1.printStackTrace();}
}
};
th.start();
}
};
channel.basicConsume(queueName, false, consumer);
Этот код работает для меня. Но мне просто интересно, есть ли лучший и более безопасный способ сделать это.