消息幂等 处理方法 以Message ID为幂等键对消息进行幂等处理的步骤如下: (1)在数据库中创建一张unique key索引为唯一Message ID的表。 (2)在Producer客户端为每条消息设置唯一Message ID。 设置唯一Message ID的示例代码如下: AMQP.BasicProperties props newAMQP.BasicProperties.Builder().messageId(UUID.randomUUID().toString()).build(); channel.basicPublish("ExchangeName","RoutingKey",true, props,("消息发送"+ i).getBytes()); (3)在Consumer客户端根据唯一Message ID对消息进行幂等处理。 根据唯一Message ID进行幂等处理的示例代码如下: channel.basicConsume(Producer.QueueName, false, "MyConsumerTag", new DefaultConsumer(channel) { @Override public void handleDelivery(String consumerTag, Envelope env, AMQP.BasicProperties properties, byte[] body) throws IOException { // 1. 获取业务唯一性索引数据。 try{ String messageId properties.getMessageId(); // Message ID或者其他作为unique key的信息。 // 2. 开启数据库事务。 idempTable.insert(messageId); // 3. 对接收到的消息,进行业务逻辑处理。 // 4. 提交或回滚事务。// 处理成功,则进行ACK,否则不要进行ACK。 channel.basicAck(env.getDeliveryTag(), false); } catch (数据库主键冲突异常 e){ // 重复消息,直接确认掉。 channel.basicAck(env.getDeliveryTag(), false); } } } );