RabbitMQ的基本使用

MQ的应用场景

  • 异步处理。比如注册,注册后会发送短信以及创建角色,这时候发送短信和创建角色可以异步进行,而不必等发送完短信之后再创建角色
  • 流量削峰。若出现流量暴增的情况如秒杀,可能会导致应用响应过慢甚至瘫痪,这时候就加入消息队列。超过最大数量就抛弃请求,跳转到相应错误页面等。
  • 日志处理。典型的是kafaka,采集日志定时存入消息队列,队列进行接收,储存和转发
  • 应用解耦。比如下单服务需要查询商品服务,若平常操作,这两个服务是耦合即密切依赖的,而通过消息队列,下单将消息发送到消息队列,后不再关注。商品服务订阅该消息队列,拿到消息后处理相关请求。

流程

RabbitMQ中有Exchange和Queue。首先Exchange可以不适用,直接使用Queue。若要将消息分组,比如商城的衣服和鞋包分为两组,就要用到Exchange。将Queue绑定到Exchange,Exchange通过key路由到Queue。服务将消息发送到相应Exchange的Queue,接收消息的服务订阅相应Queue,拿到消息。

SpringBoot集成

pom引入依赖

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

配置文件加入mq配置(git中)

spring:
  rabbitmq:
    host: 
    port: 5672
    username: guest
    password: guest

新建一个监听文件,当接收端

@Slf4j
@Component
public class MqRecevicer {

//    1. @RabbitListener(queues = "myQueue")  //选择已有queue,此时mq中应存在此queue
//    2. @RabbitListener(queuesToDeclare = @Queue("myQueue"))  //自动创建queue
//    以上两个用法并未使用分组
    @RabbitListener(bindings = @QueueBinding(
            exchange = @Exchange("testExchange"),
            key = "dress",  //根据key路由到queue
            value = @Queue("dressQueue")
    ))         //自动创建mq,exchange和queue绑定
    public void processDress(String message){
        log.info("receive message from dress: {}", message);
    }
//
    @RabbitListener(bindings = @QueueBinding(
            exchange = @Exchange("testExchange"),
            key = "shoes",  
            value = @Queue("shoesQueue")
    ))
    public void processShoes(String message){
        log.info("receive message from shoes: {}", message);
    }
}

新建测试文件,当发送端

@Component
public class MqSenderTest extends OrderApplicationTest {


    @Autowired
    private AmqpTemplate amqpTemplate;

    @Test
    public void send(){

        amqpTemplate.convertAndSend("testExchange", "shoes","test the shoes");
    }

}

运行就会在控制台打印

receive message from shoes: test the shoes

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值