我目前正在学习如何使用RabbitMQ调度作业并将其分配到其他VM。 VM上的工作程序需要完成一些硬加载工作,如果成功完成,则需要返回服务器。
我已经在官方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);
此代码对我有用。但是我只是想知道是否有更好,更线程安全的方法。