port="${rabbitmq.port}" host="${rabbitmq.host}" />
connection-factory="rabbitConnectionFactory" queue="${rabbitmq.import.queue}" routing-key="${rabbitmq.import.queue}"/>
connection-factory="rabbitConnectionFactory" concurrency="5">
这是简单的消息侦听器类,
public class ImportMessageListener {
@Override
public void onMessage(Message message) {
System.out.println("consumer output: " + message);
return message;
}
}
这是生产商(其是弹簧批次的itemWriter)
public class ImportItemWriter implements ItemWriter {
private AmqpTemplate template;
public AmqpTemplate getTemplate() {
return template;
}
public void setTemplate(AmqpTemplate template) {
this.template = template;
}
public void write(List extends T> items) throws Exception {
for (T item : items) {
Object reply = template.convertSendAndReceive(item.toString());
System.out.println("producer output: " + reply);
}
}
}
当我运行我的弹簧批作业,每个消息是一个接一个地发送和处理的,我的反应如下
consumer output: 1
producer output: 1
consumer output: 2
producer output: 2
consumer output: 3
producer output: 3
consumer output: 4
producer output: 4
consumer output: 5
producer output: 5
它shoudl发送5个信息并预约和5个消费者线程(并发= 5)应同时处理他们,因为它完成
So below should be the outout
consumer output: 1
consumer output: 2
consumer output: 3
consumer output: 4
consumer output: 5
producer output: 1
producer output: 2
producer output: 3
producer output: 4
producer output: 5
我不想生产者等待的答复应尽快回应第一条消息排队第二条消息。
我尝试使用convertAndSend,这使得它异步(不等待回复),但我如何在我的itemWriter中得到回复消息,就像我可以与convertSendAndReceive?
如果我改变我的模板配置
connection-factory="rabbitConnectionFactory" queue="${rabbitmq.import.queue}"
routing-key="${rabbitmq.import.queue}" reply-queue="${rabbitmq.import.reply.queue}">
,如果我用template.convertAndSend(item.toString());那我怎样才能得到回复信息?
我不能将我自己的消息处理程序附加到此侦听程序以获取应答消息,这是我们可以附加在消费者方面的方式。为了回复,它需要默认的RabbitmqTemplate处理程序。
2014-04-21
vishal