我们在使用RabbitTemplate写入Rabbitmq的过程中,发现某个环节会覆盖之前写入的数据,场景如下:
Msg msg = new Msg();
...
for(int i =0 ; i < 2; i++) {
msg.setId(i);
//设置优先级,并写入消息
rabbitTemplate.setExchange(exchange);
rabbitTemplate.setRoutingKey(routingKey);
//rabbitTemplate.setMessageConverter(messageConverter);
MessageProperties props = new MessageProperties();
props.setPriority(priority);
MessageConverter c = new SimpleMessageConverter();
rabbitTemplate.convertAndSend(c.toMessage(msg, props));
}
此时虽然循环了两次,后面发送的消息会覆盖前面的消息。每次发送需要是单独的对象即可解决:
for(int i =0 ; i < 2; i++) {
Msg msg = new Msg();//每次发送都是一个新的对象。
...
msg.setId(i);
//设置优先级,并写入消息
rabbitTemplate.setExchange(exchange);
rabbitTemplate.setRoutingKey(routingKey);
//rabbitTemplate.setMessageConverter(messageConverter);
MessageProperties props = new MessageProperties();
props.setPriority(priority);
MessageConverter c = new SimpleMessageConverter();
rabbitTemplate.convertAndSend(c.toMessage(msg, props));
}