SpringBoot使用RabbitMQ(路由模式注解绑定完整代码)

业务场景

订单支付后有修改库存,使用优惠券,获得积分等操作。同步顺序操作比较慢,使用消息队列可以异步操作,主要操作完成后返回接口。其他操作加到消息队列,可以削峰和解耦。

RabbitMQ用到的几个概念

其中包含几个概念:
publisher:生产者,也就是发送消息的一方
consumer:消费者,也就是消费消息的一方
queue:队列,存储消息。生产者投递的消息会暂存在消息队列中,等待消费者处理
exchange:交换机,负责消息路由。生产者发送的消息由交换机决定投递到哪个队列。
routingKey:预先设定的Binding Key(绑定键)来决定消息应该被路由到哪个队列

SpringBoot代码

pom.xml

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-web</artifactId>  
</dependency>

<!-- AMQP 依赖, RabbitMq -->  
<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-amqp</artifactId>  
</dependency>

application.yml

spring:  
  #配置rabbitMq服务器地址和账号密码
  rabbitmq:  
    host: xxx.xxx.xxx.xxx  
    port: 5672  
    username: admin  
    password: 123456  
    virtual-host: /

消费者端监听器(订单优惠券队列相关)

路由模型的绑定

exchange交换机名:order
key路由键名:coupons
queue队列名:queue.order.coupons

import com.alibaba.fastjson.JSON;  
import com.alibaba.fastjson.JSONObject;  
import lombok.extern.slf4j.Slf4j;  
import org.springframework.amqp.core.ExchangeTypes;  
import org.springframework.amqp.rabbit.annotation.Exchange;  
import org.springframework.amqp.rabbit.annotation.Queue;  
import org.springframework.amqp.rabbit.annotation.QueueBinding;  
import org.springframework.amqp.rabbit.annotation.RabbitListener;  
import org.springframework.stereotype.Component;  
  
@Component  
@Slf4j  
public class ZjqpOrderQueueListener {  
    public static final String QUEUE_NAME = "queue.order.coupons";  
    /**  
     * @Author   
     * @Date 15:51 2024/12/12    
	* @Description 新建订单后优惠券变化  
     */  
    @RabbitListener(bindings = @QueueBinding(  
            value = @Queue(value = QUEUE_NAME, durable = "true"),  
            exchange = @Exchange(value = "order", type = ExchangeTypes.TOPIC),  
            key = "coupons")  
    )    public void createOrderAndChangeCoupon(String dataString) {  
    //MQ处理优惠券状态,json字符串转回订单对象
        JSONObject jsonObject = JSON.parseObject(dataString);  
        ZjqpOrder zjqpOrder = JSONObject.toJavaObject(jsonObject, ZjqpOrder.class);  
        //业务代码省略
    }}

生产者端(创建订单时调用的service实现层代码)

@Resource  
private RabbitTemplate rabbitTemplate;  
private final String EXCHANGE_NAME = "order";  
  
@Override  
public boolean createOrderMQs(ZjqpOrder zjqpOrder) {  
    //MQ处理优惠券状态,订单对象转成json字符串  
    rabbitTemplate.convertAndSend(EXCHANGE_NAME, "coupons", com.alibaba.fastjson.JSONObject.toJSONString(zjqpOrder));  
    return true;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值