RabbitMQ 监听时报错 Cannot convert from [[B] to [XXX]

结论

消息发送者和消费者 使用的消息转换器不同导致的(查看是否在消息发送者和消费者中添加了相同的消息转换器),默认使用的是 SimpleMessageConverter,在消息发送者和消费者中添加 Jackson2JsonMessageConverter 转换器,并导入相关依赖如下所示

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>
    @Bean
    public MessageConverter messageConverter() {
        return new Jackson2JsonMessageConverter();
    }

其他报错

1、Cannot construct instance of RabbitMqAccepted ` (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator)

解决方法:也是在 RabbitMqAccepted 类中 加入 @NoArgsConstructor 注解

2、No serializer found for class RabbitMqAccepted and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)

解决方法:在 RabbitMqAccepted 类中 加入 @Getter 注解

参考另一文章​​​​​​​

以下是我的详细代码

1、配置队列

@Configuration
@RequiredArgsConstructor
public class RabbitAcceptConfig {

	/** 队列名称 */
	public static final String QUEUE_NAME = "tmp-accepted";

	/** 死信名称 */
	public static final String DEAD_LETTER_QUEUE_NAME = "tmp-accepted-dl";

	/**
	 * 队列
	 * @return queue
	 */
	@Bean
	Queue acceptQueue() {
		return new DefaultQueue(QUEUE_NAME, this.acceptDeadLetterQueue().getName());
	}

	/**
	 * 死信队列
	 * @return queue
	 */
	@Bean
	Queue acceptDeadLetterQueue() {
		return new DefaultDeadLetterQueue(DEAD_LETTER_QUEUE_NAME);
	}

}
/**
 * 注意:不加 @Getter 注解,会报上述第二种错误
 *      不加 @NoArgsConstructor,会报第一种错误,
 */
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class RabbitMqAccepted implements Serializable {

	private String content;

}

使用 rabbitTemplate 发送消息

@Service
@Transactional
public class CustomService {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    public void sendMessage() {
        
        // Message送信
		this.rabbitTemplate.convertAndSend(RabbitAcceptConfig.QUEUE_NAME, new RabbitMqAccepted("test"));
    }

}

监听消息,对消息进行处理

@Slf4j
@Component
@Transactional
public class Handler {

    // 监听消息处理
	@RabbitListener(id = RabbitAcceptConfig.QUEUE_NAME,
			queues = RabbitAcceptConfig.QUEUE_NAME)
	public void on(RabbitMqAccepted accepted) {

		String content = accepted.getContent();
        // 输出:content :test
		log.info("content :{}", content);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值