我正在使用一个简单的HelloWorld应用程序在RabbitMQ Spring Boot应用程序中侦听JSON消息。我想使用/配置GSON消息转换器,以便可以将其作为JSON映射到java对象接收。
例如,如果我想使用Jackson API将Json转换为Java,我将仅添加以下配置,我的监听器将确保将以JSON格式发送的消息转换为其相应的POJO表示形式。
@Bean
public MessageConverter jackson2MessageConverter() {
return new Jackson2JsonMessageConverter();
}
下面的侦听器在解组到java对象后仅打印消息。
@RabbitListener(queues = "some.rabbitmq.queue")
public void receiveMessage(final CustomJavaPojo message) {
log.info("Received message as specific CustomJavaPojo: {}", message.toString());
}
由于我已在同一应用程序的其他部分中使用GSON进行HTTP消息转换,所以我也想在该应用程序的消息传递部分中使用相同的gson库。但是,我找不到我可以使用的任何实现。
我提到了spring amqp converter package for various implementation,但没有发现gson的变化。
是编写自己的MessageConverter接口的GSON实现的唯一方法吗?
或者,作为替代,我收到消息是通用的
@RabbitListener(queues = MessagingApplication.QUEUE_GENERIC_NAME)
public void receiveMessage(final Message message) {
log.info("Received message as generic: {}", message.toString());
}
,然后使用gson
从json
字符串中获取Java对象
Gson gson = new Gson();
String json = new String(message.getBody(), StandardCharsets.UTF_8);
CustomJavaPojo result = gson.fromJson(json, CustomJavaPojo.class);
类似地,要使用以下rabbitTemplate
配置发送消息,我将需要someImplementationOfGsonMessageConverter()
,该消息似乎不可用。
@Bean
public AmqpTemplate rabbitTemplate(final ConnectionFactory connectionFactory) {
final RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
rabbitTemplate.setMessageConverter(someImplementationOfGsonMessageConverter());
return rabbitTemplate;
}
因此,我将无法使用下面的convertAndSend
方法
rabbitTemplate.convertAndSend(EXCHANGE, ROUTING_KEY, customJavaPojo);
因此,您是否建议其他可用的替代方法是使用
rabbitTemplate.produce()
方法,并使用gson
将pojo转换为json。
有什么想法吗?