rabbitmq发送和接收消息的集中方式及处理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

因为看到写法比较多,看的比较乱,我这里总结两种写法


一、第一种

生产者

	@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);
	}
  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值