提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
因为看到写法比较多,看的比较乱,我这里总结两种写法
一、第一种
生产者
@Autowired
private RabbitTemplate rabbitTemplate;
public void sendMessage(CostomerMessage costomerMessage){
//第一个参数是 交换机名称
//第二个参数是绑定交换机和队列的key名称
//第三个是发小消息实体类数据
rabbitTemplate.convertAndSend(exchangeName,routing_key,costomerMessage);
}
消费者
@RabbitListener(
bindings = {
@QueueBinding(
value = @Queue(value = 队列名称)
exchange = @Exchange(value = 交换机名称,type = 交换机类型,可以是fanout)
key = routing_key
)
}
)
//使用 @Payload 和 @Headers 注解可以获取消息中的 body 与 headers 信息
public void consumer(@Payload CostomerMessage costomerMessage,Channel channel,@Headers Map<String,Object> headers){
//处理逻辑
Long deliveryTag = (Long)headers.get("amqp_deliveryTag");
channel.basicAck(deliveryTag.flase);
}
二、第二种
生产者
content就是 JSONObject.toString(xxxx类型的对象)
rabbitTemplate.convertAndSend(exchange,routing,content,
message -> {
//消息持久化
message.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PRESISTENT);
return message;
}
)
消费者
//前提:需要在RabbitMqConfig配置中 配置 交换机和队列及他们的关系
@RabbitListener(queues = "队列名称")
public void consumer(String msg,Channl channel ,Message message)){
//处理逻辑
//获取消息对象
JSONObject.parseObject(msg,xxx.class);
//获取消息序号
channel.basicAck(message.getMassageProperties().getDeliveryTag(),false);
}