spring.application.name=Mall-order spring.cloud.nacos.config.server-addr=127.0.0.1:8848 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 spring.rabbitmq.host=192.168.56.10 spring.rabbitmq.port=5672 spring.rabbitmq.virtual-host=/ #只要抵达队列,以异步形式回调 spring.rabbitmq.template.mandatory=true #新版本的发送确认 spring.rabbitmq.publisher-confirm-type=CORRELATED #手动ack开启 spring.rabbitmq.listener.simple.acknowledge-mode=manual spring.cloud.nacos.config.namespace=becc5563-6c9b-47ff-a6b1-580982722371
spring.application.name=Mall-order spring.cloud.nacos.config.server-addr=127.0.0.1:8848 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 spring.rabbitmq.host=192.168.56.10 spring.rabbitmq.port=5672 spring.rabbitmq.virtual-host=/ #只要抵达队列,以异步形式回调 spring.rabbitmq.template.mandatory=true #新版本的发送确认 spring.rabbitmq.publisher-confirm-type=CORRELATED #手动ack开启 spring.rabbitmq.listener.simple.acknowledge-mode=manual spring.cloud.nacos.config.namespace=becc5563-6c9b-47ff-a6b1-580982722371
package com.alatus.mall.order.service.impl; import com.alatus.mall.order.entity.OrderEntity; import com.alatus.mall.order.entity.OrderReturnReasonEntity; import com.rabbitmq.client.Channel; import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Service; import java.io.IOException; import java.util.Map; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.alatus.common.utils.PageUtils; import com.alatus.common.utils.Query; import com.alatus.mall.order.dao.OrderItemDao; import com.alatus.mall.order.entity.OrderItemEntity; import com.alatus.mall.order.service.OrderItemService; @Service("orderItemService") @RabbitListener(queues = "helloJava") public class OrderItemServiceImpl extends ServiceImpl<OrderItemDao, OrderItemEntity> implements OrderItemService { @Override public PageUtils queryPage(Map<String, Object> params) { IPage<OrderItemEntity> page = this.page( new Query<OrderItemEntity>().getPage(params), new QueryWrapper<OrderItemEntity>() ); return new PageUtils(page); } // 手动确认模式,只要没有ACK签收完成,就会又回到ready状态,只要没有明确签收,就会回去 @RabbitHandler public void getMessage(Message message, OrderReturnReasonEntity entity, Channel channel){ System.out.println(entity); // channel通道自增的,按顺序自增 long deliveryTag = message.getMessageProperties().getDeliveryTag(); // 签收货物,使用deliveryTag标注当前消息,不用批量签收模式 try { if(deliveryTag%2==0){ // 普通拒绝 // channel.basicReject(deliveryTag,false); // 可以让该消息重新入队,然后再来,如果写了false,就直接丢弃该消息了 channel.basicNack(deliveryTag,false,true); } else{ channel.basicAck(deliveryTag,false); } } catch (IOException e) { throw new RuntimeException(e); } } @RabbitHandler public void getMessage1(Message message,OrderEntity entity,Channel channel) { System.out.println(entity); long deliveryTag = message.getMessageProperties().getDeliveryTag(); try { if(deliveryTag%2==0){ // 普通拒绝 // channel.basicReject(deliveryTag,false); // 可以让该消息重新入队,然后再来,如果写了false,就直接丢弃该消息了 channel.basicNack(deliveryTag,false,true); } else{ channel.basicAck(deliveryTag,false); } } catch (IOException e) { throw new RuntimeException(e); } } }
package com.alatus.mall.order.service.impl; import com.alatus.mall.order.entity.OrderEntity; import com.alatus.mall.order.entity.OrderReturnReasonEntity; import com.rabbitmq.client.Channel; import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Service; import java.io.IOException; import java.util.Map; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.alatus.common.utils.PageUtils; import com.alatus.common.utils.Query; import com.alatus.mall.order.dao.OrderItemDao; import com.alatus.mall.order.entity.OrderItemEntity; import com.alatus.mall.order.service.OrderItemService; @Service("orderItemService") @RabbitListener(queues = "helloJava") public class OrderItemServiceImpl extends ServiceImpl<OrderItemDao, OrderItemEntity> implements OrderItemService { @Override public PageUtils queryPage(Map<String, Object> params) { IPage<OrderItemEntity> page = this.page( new Query<OrderItemEntity>().getPage(params), new QueryWrapper<OrderItemEntity>() ); return new PageUtils(page); } // 手动确认模式,只要没有ACK签收完成,就会又回到ready状态,只要没有明确签收,就会回去 @RabbitHandler public void getMessage(Message message, OrderReturnReasonEntity entity, Channel channel){ System.out.println(entity); // channel通道自增的,按顺序自增 long deliveryTag = message.getMessageProperties().getDeliveryTag(); // 签收货物,使用deliveryTag标注当前消息,不用批量签收模式 try { if(deliveryTag%2==0){ // 普通拒绝 // channel.basicReject(deliveryTag,false); // 可以让该消息重新入队,然后再来,如果写了false,就直接丢弃该消息了 channel.basicNack(deliveryTag,false,true); } else{ channel.basicAck(deliveryTag,false); } } catch (IOException e) { throw new RuntimeException(e); } } @RabbitHandler public void getMessage1(Message message,OrderEntity entity,Channel channel) { System.out.println(entity); long deliveryTag = message.getMessageProperties().getDeliveryTag(); try { if(deliveryTag%2==0){ // 普通拒绝 // channel.basicReject(deliveryTag,false); // 可以让该消息重新入队,然后再来,如果写了false,就直接丢弃该消息了 channel.basicNack(deliveryTag,false,true); } else{ channel.basicAck(deliveryTag,false); } } catch (IOException e) { throw new RuntimeException(e); } } }
package com.alatus.mall.order.config; import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.connection.CorrelationData; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; import org.springframework.amqp.support.converter.MessageConverter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.annotation.PostConstruct; @Configuration public class RabbitConfig { @Autowired private RabbitTemplate rabbitTemplate; @Bean public MessageConverter messageConverter(){ return new Jackson2JsonMessageConverter(); } // 定制RabbitCallback,构造器创建完成,执行此方法 @PostConstruct public void initRabbitTemplate(){ // 设置确认回调 rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() { @Override public void confirm(CorrelationData correlationData, boolean ack, String cause) { System.out.println(""+correlationData+ack+cause); } }); // 设置消息队列的确认回调,只要消息没能顺利抵达队列,就会触发这个回调 rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() { @Override public void returnedMessage(Message message, int replayCode, String replyText, String exchange, String routingKey) { System.out.println(""+message+replyText+exchange+routingKey); } }); } }
package com.alatus.mall.order.config; import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.connection.CorrelationData; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; import org.springframework.amqp.support.converter.MessageConverter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.annotation.PostConstruct; @Configuration public class RabbitConfig { @Autowired private RabbitTemplate rabbitTemplate; @Bean public MessageConverter messageConverter(){ return new Jackson2JsonMessageConverter(); } // 定制RabbitCallback,构造器创建完成,执行此方法 @PostConstruct public void initRabbitTemplate(){ // 设置确认回调 rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() { @Override public void confirm(CorrelationData correlationData, boolean ack, String cause) { System.out.println(""+correlationData+ack+cause); } }); // 设置消息队列的确认回调,只要消息没能顺利抵达队列,就会触发这个回调 rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() { @Override public void returnedMessage(Message message, int replayCode, String replyText, String exchange, String routingKey) { System.out.println(""+message+replyText+exchange+routingKey); } }); } }
package com.alatus.mall.order.controller; import com.alatus.mall.order.entity.OrderEntity; import com.alatus.mall.order.entity.OrderReturnReasonEntity; import org.springframework.amqp.rabbit.connection.CorrelationData; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Date; import java.util.UUID; @RestController public class RabbitController { @Autowired private RabbitTemplate rabbitTemplate; @GetMapping("/sendMessage") public String sendMessage(){ for (int i = 0; i < 10; i++) { if(i % 2 == 0){ OrderReturnReasonEntity reasonEntity = new OrderReturnReasonEntity(); reasonEntity.setId(1L); reasonEntity.setCreateTime(new Date()); reasonEntity.setName("哈哈"+i); rabbitTemplate.convertAndSend("helloWorld","hello",reasonEntity,new CorrelationData(UUID.randomUUID().toString())); } else{ OrderEntity entity = new OrderEntity(); entity.setOrderSn(UUID.randomUUID().toString()); rabbitTemplate.convertAndSend("helloWorld","hello",entity,new CorrelationData(UUID.randomUUID().toString())); } } return "OK"; } }
package com.alatus.mall.order.controller; import com.alatus.mall.order.entity.OrderEntity; import com.alatus.mall.order.entity.OrderReturnReasonEntity; import org.springframework.amqp.rabbit.connection.CorrelationData; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Date; import java.util.UUID; @RestController public class RabbitController { @Autowired private RabbitTemplate rabbitTemplate; @GetMapping("/sendMessage") public String sendMessage(){ for (int i = 0; i < 10; i++) { if(i % 2 == 0){ OrderReturnReasonEntity reasonEntity = new OrderReturnReasonEntity(); reasonEntity.setId(1L); reasonEntity.setCreateTime(new Date()); reasonEntity.setName("哈哈"+i); rabbitTemplate.convertAndSend("helloWorld","hello",reasonEntity,new CorrelationData(UUID.randomUUID().toString())); } else{ OrderEntity entity = new OrderEntity(); entity.setOrderSn(UUID.randomUUID().toString()); rabbitTemplate.convertAndSend("helloWorld","hello",entity,new CorrelationData(UUID.randomUUID().toString())); } } return "OK"; } }