学习笔记3-RabbitMq的使用

本文介绍了如何在SpringBoot2.7.2项目中集成RabbitMQ,包括添加依赖、配置参数、创建生产者和消费者,以及测试用例的编写。作者详细展示了如何设置交换机、队列和路由键,以及在实际业务中的应用示例。
摘要由CSDN通过智能技术生成

安装过程略
因为是直接在springboot项目中使用,所以选用了spring封装好的SpringBoot RabbirMQ Starter

  1. 导入依赖
    我选用的springboot版本是2.7.2,所以这里rabbitmq也使用2.7.2版本
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
            <version>2.7.2</version> 
        </dependency>
  1. application.yml 中设置基本参数,在spring下加入如下,账号密码是RabbitMq官方默认的
spring:
  rabbitmq:
    host: localhost
    port: 5672
    password: guest
    username: guest

新建一个专用的mq包

在这里插入图片描述
3. 构建生产者
这个最简单,也是后面加到具体业务代码里的,比如订单下单后,调用sendMessage传入单号,之后再到消费者代码中进行逻辑处理。


@Component
public class MyMessageProducer {
    @Resource
    private RabbitTemplate rabbitTemplate;

    //绑定自定义命名的交换机名称和路由关键字
    public void sendMessage(String message){
        rabbitTemplate.convertAndSend("my_exchange","my_routingKey" ,message);
    }
}

关于"my_exchange"和"my_routingKey",这里我使用的是Direct交换机模式
rabbitmq官方描述如下:https://www.rabbitmq.com/tutorials/tutorial-four-java
在这里插入图片描述
简单讲就是把交换机和队列进行关联,指定交换机把什么样的消息发给哪个队列,而routingKey就是把消息转发给指定的队列
说起来还没创建交换机和队列,运行mian函数,创建一下

public class BiMqInitMain {
    public static void main(String[] args) {
        try {
            String EXCHANGE_NAME = "my_exchange";
            ConnectionFactory factory = new ConnectionFactory();
            factory.setHost("localhost");
            Connection connection = factory.newConnection();
            HashMap<String, Object> map = new HashMap<>();
            //"x-message-ttl"  指定消息过期时间
            map.put("x-message-ttl",90000);
            Channel channel = connection.createChannel(); //队列1
            channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT); //这是交换机,通用的

            String queueName = "my_queue";
            channel.queueDeclare(queueName,true,false,false,map);
            channel.queueBind(queueName, EXCHANGE_NAME, "my_routingKey");
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

成功后进入http://localhost:15672可以看到创建的队列和交换机

  1. 构建消费者
@Component
@Slf4j
public class MyMessageConsumer {
//指定监听的消息队列和确认机制
    @SneakyThrows
    @RabbitListener(queues = "my_queue",ackMode = "MANUAL")
    public void receiveMessage(String message, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long delivery_tag){
        log.info("接受消息={}",message);
        channel.basicAck(deliveryTag,false);
    }
}
  1. 在生产者类页面按CTRL+shift+T创建MyMessageProducerTest测试用例
@SpringBootTest
class MyMessageProducerTest {
@Resource
private MyMessageProducer myMessageProducer;
    @Test
    void sendMessage() {
        myMessageProducer.sendMessage("my_exchange","my_routingKey","this is a test");
    }
}

运行即可
6. 具体到业务场景中就调用生产者传入信息

orderMessageProducer.sendMessage(String.valueOf(order.getId()));

再到消费者代码里写逻辑

@Component
@Slf4j
public class OrderMessageConsumer {

    @SneakyThrows
    @RabbitListener(queues = "my_queue",ackMode = "MANUAL")
    public void receiveMessage(String message, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long delivery_tag){
        log.info("接受消息={}",message);
        
        /**
        处理逻辑
        **/
        
        channel.basicAck(deliveryTag,false);
    }
}
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值