不能其他集合或列表,或报各种错误,不知道这个map类不报错的原因。
@Test
public void test4() throws IOException, TimeoutException, InterruptedException {
Channel channel=NewChannel.channel;
channel.confirmSelect();
ConcurrentSkipListMap<Long,String> outstandingConfirms = new ConcurrentSkipListMap<>();
channel.addConfirmListener(new ConfirmListener() {
@Override
public void handleAck(long deliveryTag, boolean multiple) throws IOException {
System.out.println("delivertag="+deliveryTag+" multiple="+multiple);
if(multiple){
ConcurrentNavigableMap<Long, String> confiremed = outstandingConfirms.headMap(deliveryTag);
confiremed.clear();
outstandingConfirms.remove(deliveryTag);
}else {
outstandingConfirms.remove(deliveryTag);
}
}
@Override
public void handleNack(long deliveryTag, boolean multiple) throws IOException {
System.out.println("NACK --- delivertag="+deliveryTag+" multiple="+multiple);
if(multiple){
ConcurrentNavigableMap<Long, String> confiremed = outstandingConfirms.headMap(deliveryTag);
Iterator<String> iterator=confiremed.values().iterator();
while(iterator.hasNext()){
long tag=channel.getNextPublishSeqNo();
String message= iterator.next();
channel.basicPublish("c1-exchange", "false", null, message.getBytes(StandardCharsets.UTF_8));
}
confiremed.clear();
outstandingConfirms.remove(deliveryTag);
}else {
long tag=channel.getNextPublishSeqNo();
String message=outstandingConfirms.get(deliveryTag);
channel.basicPublish("c1-exchange", "false", null, message.getBytes(StandardCharsets.UTF_8));
outstandingConfirms.remove(deliveryTag);
}
}
});
for(int i=0;i<10;i++){
for(int j=0;j<10;j++) {
long tag=channel.getNextPublishSeqNo();
String message="body"+tag;
outstandingConfirms.put(tag,message);
channel.basicPublish("c1-exchange", "false", null, message.getBytes(StandardCharsets.UTF_8));
}
}
TimeUnit.SECONDS.sleep(10);
channel.close();
NewChannel.connection.close();
}