rabbitmq相关使用

使用rabbitmq实现异步解耦

使用步骤:

1、pom依赖

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

2、yml配置文件

spring:
	rabbitmq:
  		host: 127.0.0.1
 		port: 5672
  		username: guest
  		password: guest
  		virtual-host: /

3、发送消息

/*
 * 测试rabbitmq的使用
 * */
@Autowired
private RabbitTemplate rabbitTemplate;

@RequestMapping("/send")
public boolean send(String message) {
    //现在我要阻塞5000ms/5秒钟
    // 如果代码写在控制层此时执行结果是5020毫秒   把一些耗时操作放在监听者中 异步解耦,接口可以先返回数据,避免接口响应时间过长
    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {
        throw new RuntimeException(e);
    }
    // 队列名称(一定要记得创建队列simple.queue  在FanoutConfig.class中)
    String queueName = "simple.queue";
    // 消息
    // 发送消息
    rabbitTemplate.convertAndSend(queueName, message);
    return true;
}

4、接受消息

package cn.xue.user.controller;

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
public class SpringRabbitListener {

    @RabbitListener(queues = "simple.queue")
    public void listenSimpleQueueMessage(String msg) {
        //如果把一些耗时操作放到这里 rabbitmq会异步执行
//        try {
//            Thread.sleep(5000);
//        } catch (InterruptedException e) {
//            throw new RuntimeException(e);
//        }
        System.out.println("spring 消费者接收到消息:【" + msg + "】");
    }


}

5、创建队列,必须有这个配置类,否则会报错

package cn.xue.user.controller;

import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/*
*  创建队列
* */
@Configuration
public class FanoutConfig {
    /**
     * 创建第1个队列  simple.queue
     */
    @Bean
    public Queue fanoutQueue1(){
        return new Queue("simple.queue");
    }

}

结论

上面的  Thread.sleep(5000); 是为了模拟耗时操作

如果把  Thread.sleep(5000);写在send中,请看执行时长(5474ms)

如果把  Thread.sleep(5000);写在监听者中,请看执行时长(130ms)

 这样的话即实现了异步执行,也会减少代码之间的耦合度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘猫_A

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值