RabbitMQ在SpringBoot中使用的一些注意点

本文详细介绍了如何在Spring Boot应用中使用RabbitMQ实现消息传递,包括实体对象的序列化与反序列化,配置Jackson2JsonMessageConverter进行数据转换,以及生产者和消费者的配置流程。
摘要由CSDN通过智能技术生成

在使用SpringBoot中,笔者使用到了RabbitMQ,其中踩了不少地雷,经过些许的刻版终于把它调通了,

笔者主要说的是从生产者生产数据并发送给消费者到后者接收并处理数据这么一个全过程,我这里的数据指的是实体对象.生产者和消费者是处在两个不同的项目中的.

首先说明下整个过程.

在 Spring-AMQP 中比较重要的类就是 Message ,因为要发送的消息必须要构造成一个 Message 对象来进行传输。Message 对象包括两部分 Body 和 Properties
消息生产者构造好 Message 之后,就会将 Message 发送到指定的 Exchange (交换机),再根据 Exchange 的类型及 routing-key 将消息路由到相应的 queue 中,最后被监听该 queue 的消费者消费.


tips:

1,当处理的数据是实体类的时候,需要特别注意,它是需要转换的,否则会抛错的.笔者指的是使用



1,生产者负责发送如右边:RabbitTemplate rabbitTemplate.convertAndSend("testDirectExchange","key1", new Teacher("whc_teacher"));

2,消费者这边有监听器,绑定好队列,交换机和路由.如下,在消费者类头配置.

@RabbitListener(
        containerFactory = "simpleRabbitListenerContainerFactory",
        bindings = @QueueBinding(
                value = @Queue(value = "testDirectQueue1",durable = "true"),
                exchange = @Exchange(value = "testDirectExchange",type = ExchangeTypes.DIRECT),
                key = "key1")
)

3,最核心的我觉得是它的配置文件了,因为我们传输的是是实体对象.所以牵涉到数据的转换了.

数据转化我用的是Jackson2JsonMessageConverter,比较友好.


认证: @Qualifier(value = "classMapper") ClassMapper classMapper


传输:Jackson2JsonMessageConverter messageConverter = new Jackson2JsonMessageConverter();


需要把认证set进去,messageConverter.setClassMapper(classMapper);


其中,classMapper 这个bean里面使用的是DefaultClassMapper,它里面有放着一个map.

特别需要注意的是:Jackson2JsonMessageConverter,JsonMessageConverter 等都是比较常用的转化器,但是他们也是有局限性的,

不过使用 它们时有一个小问题,在不对它进行任何改造的前提下 ,发送消息的类和接受消息的类必须是一样的,不仅是要里面的字段一样,类名一样,连类的包路径都要一样。

4,
交换机:_Exchange 用于转发消息,但是它不会做存储_ ,如果没有 Queue bind 到 Exchange 的话,它会直接丢弃掉 Producer 发送过来的消息。常用交换机又分为3种类型:Direct Exchange,Topic Exchange,Fanout Exchange。

绑定:也就是交换机需要和队列相绑定,这其中如上图所示,是多对多的关系.

虚拟主机:一个虚拟主机持有一组交换机、队列和绑定。为什么需要多个虚拟主机呢?很简单,_RabbitMQ当中,用户只能在虚拟主机的粒度进行权限控制
























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值