资讯详情

RabbitMq的序列化和反序列化(springBoot)

一、需求 发送时需要将对象序列化为json接收时,字符串反序列化为对象。

二、方案 1、序列化 在任何配置类别下提供RabbitTemplate的bean,覆盖Springboot自动配置。将信息转译器设置为springboot提供的Jackson转译器。

// 提供自定义RabbitTemplate,将对象序列化为json串     @Bean     public RabbitTemplate jacksonRabbitTemplate(ConnectionFactory connectionFactory) {undefined         RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);         rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter());         return rabbitTemplate;     }

2、反序列化 实现RabbitListenerConfigurer配置反序列化转译器的接口(可以是序列化转译器)bean也放在这里))

@Configuration public class RabbitMQConfig implements RabbitListenerConfigurer {      // 可以将json串反序列化为对象     @Override     public void configureRabbitListeners(RabbitListenerEndpointRegistrar rabbitListenerEndpointRegistrar) {         rabbitListenerEndpointRegistrar.setMessageHandlerMethodFactory(messageHandlerMethodFactory());     }      @Bean     MessageHandlerMethodFactory messageHandlerMethodFactory(){         DefaultMessageHandlerMethodFactory messageHandlerMethodFactory = new DefaultMessageHandlerMethodFactory();         messageHandlerMethodFactory.setMessageConverter(mappingJackson2MessageConverter());         return messageHandlerMethodFactory;     }      @Bean     public MappingJackson2MessageConverter mappingJackson2MessageConverter(){         return  new MappingJackson2MessageConverter();     }      // 提供自定义RabbitTemplate,将对象序列化为json串     @Bean     public RabbitTemplate jacksonRabbitTemplate(ConnectionFactory connectionFactory) {         RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);         rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter());         return rabbitTemplate;     } }

三、测试 可以定义消费者直接以对象的形式接收消息

@RabbitListener(queues = "huawei")     public void huaweiHandler(SysUserEntity msg) {         System.out.println("huaweiHandler>>>>>"   msg);     } 

生产者直接发送对象

SysUserEntity user = new SysUserEntity(1l,"wtq","123",new Date()); rabbitTemplate.convertAndSend(RabbitTopicConfig.TOPIC_NAME, "huawei.",user); 

与序列化无关

@Payload 与 @Headers

  • 使用 @Payload 和 @Headers 可以在消息中注释 body 与 headers 信息
    @RabbitListener(queues = "debug") public void processMessage1(@Payload String body, @Headers Map<String,Object> headers) {     System.out.println("body:" body);     System.out.println("Headers:" headers); }

    也可获得单个 Header 属性

    @RabbitListener(queues = "debug") public void processMessage1(@Payload String body, @Header String token) {     System.out.println("body:" body);     System.out.println("token:" token); }

    注意:@payload代表的请求体是我们发送的信息

标签: wtq1050f动态扭矩传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台