消息中间件RabbitMQ(二)——SpringBoot整合RabbitMQ初使用

本文详细介绍在SpringBoot中整合RabbitMQ的过程,包括选择依赖、配置、发送和消费消息,以及自定义消息转换器。并通过示例展示了如何创建Exchange和Queue。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 工程创建

1.1 选择RabbitMQ依赖

在这里插入图片描述
在这里插入图片描述

1.2 配置RabbitMQ

// RabbitMQ的url
spring.rabbitmq.host=192.168.1.108
spring.rabbitmq.port=5672

// 用户名和密码,默认为guest
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

RabbitProperties代码中片段
在这里插入图片描述

2. 测试RabbitMQ

2.1 发送Map类型消息

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootDataAmqpApplicationTests {

    @Autowired
    RabbitTemplate rabbitTemplate;

    @Test
    public void contextLoads() {
        Map<String,Object> map = new HashMap<>();
        map.put("msg","the first message from springboot");
        map.put("data","来自SpringBoot");
        // 向交换器exchange.direct中路由键为scorpios的队列,发送Map类型消息
        rabbitTemplate.convertAndSend("exchange.direct","scorpios",map);
    }
}

Web控制台测试结果
在这里插入图片描述

在这里插入图片描述

接收消息,看看消息的内容:

//接收数据,如何将数据自动的转为json发送出去
@Test
public void receive(){

    Object o = rabbitTemplate.receiveAndConvert("scorpios");
    System.out.println(o.getClass());
    System.out.println(o);

}

测试结果为正确消息内容:

在这里插入图片描述

在使用RabbitMQ发送消息时,默认会将对象序列化之后发出,所以看到上面类似乱码后的结果。但如何让数据自动转为json,然后发送出去呢?我们需要改变默认的MessageConverter类型,默认使用的是:SimpleMessageConverter

下面是RabbitTemplate类的代码片段:
在这里插入图片描述

2.2 自定义MessageConverter

@Configuration
public class MyAMQPConfig {

    @Bean
    public MessageConverter messageConverter(){
        //使用Jackson2JsonMessageConverter类型的MessageConverter
        return new Jackson2JsonMessageConverter();
    }
}

重新运行上述发送消息的测试代码,,结果如下:

在这里插入图片描述
在这里插入图片描述

2.3 发送自定义类型消息

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootDataAmqpApplicationTests {

    @Autowired
    RabbitTemplate rabbitTemplate;

    @Test
    public void contextLoads() {
        //向交换器exchange.direct中路由键为scorpios队列,发送MyBook类型消息
        rabbitTemplate.convertAndSend("exchange.direct","scorpios",new MyBook("西游记","吴承恩"));
    }
}

Web控制台测试结果
在这里插入图片描述

3. 消费消息

对于RabbitMQ队列中有消息后,我们希望立刻消费消息。比如在订单系统有消息后,库存系统就应该立即接收消息,并消费消息,把库存信息及时更新。下面来模拟消费消息的情况。

3.1 开启EnableRabbit

@EnableRabbit		//开启EnableRabbit
@SpringBootApplication
public class SpringbootDataAmqpApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootDataAmqpApplication.class, args);
    }

}

3.2 添加注解

在服务方法上添加@RabbitListener注解,并标明接收哪个队列消息

@Service
public class bookService {

    // 接收队列scorpios的消息,并消费它
    @RabbitListener(queues = "scorpios")
    public void receiveMessage(MyBook myBook){
        System.out.println("收到消息为:"+myBook);
    }
}

3.3 测试

先发送消息,看看bookService服务能不能及时消费该消息

点击运行测试发送消息的代码后,可以发现bookService服务立刻消费了该消息

在这里插入图片描述

4. 创建Exchange和Queue

在上面的所有例子中,exchange.directscorpios都是之前在RabbitMQWeb页面中创建的,下面在SpringBoot中用代码来创建exchangequeue,需要使用到RabbitAdmin

4.1 创建Exchange

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootDataAmqpApplicationTests {

    @Autowired
    RabbitAdmin rabbitAdmin;

    @Test
    public void createExchange(){
        // 使用RabbitAdmin来创建RabbitAdmin.exchange交换器
        rabbitAdmin.declareExchange(new DirectExchange("RabbitAdmin.exchange"));
        System.out.println("创建完成");
    }
}

运行上述代码,结果
在这里插入图片描述

4.2 创建Queue

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootDataAmqpApplicationTests {

    @Autowired
    RabbitAdmin rabbitAdmin;

    @Test
    public void createExchange(){
        // 使用RabbitAdmin来创建RabbitAdmin.queue队列
        rabbitAdmin.declareQueue(new Queue("RabbitAdmin.queue",true));
        System.out.println("创建完成");
    }
}

在这里插入图片描述

4.3 Exchange和队列绑定

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootDataAmqpApplicationTests {

    @Autowired
    RabbitAdmin rabbitAdmin;

    @Test
    public void createExchange(){
        // 将RabbitAdmin.exchange和RabbitAdmin.queue绑定,路由键为:RabbitAdmin.key
        rabbitAdmin.declareBinding(new Binding("RabbitAdmin.queue", 
                                               Binding.DestinationType.QUEUE,"RabbitAdmin.exchange","RabbitAdmin.key",null));
    }
}

绑定前
在这里插入图片描述
绑定后
在这里插入图片描述

5. 小结

本文在SpringBoot中整合了RabbitMQ,并给出了如何发送消息和修改消息默认的序列化规则。
模拟了bookService消费消息的场景,最后使用RabbitAdmin来创建ExchangeQueue

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

止步前行

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

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

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

打赏作者

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

抵扣说明:

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

余额充值