Spring RabbitMQ 消息传递。使用 JSON 高效发送

Spring RabbitMQ Messaging. Using JSON send efficiently

如果使用 JSON 对象通过 RabbitMQ 发送和接收,这是最干净的发送和接收方式吗?所有这些转换似乎都是低效的。

发送代码

JSONObject messageJSON = new JSONObject();
messageJSON.put("messageId", "testId");
messageJSON.put("NodeId", "testNode");

template.convertAndSend("TEST-EXCHANGE",
    "routing.test", messageJSON.toJSONString()
        .getBytes());

接收码

public class Listener implements MessageListener {

  @Override
  public void onMessage(Message message) {
    String recmessage = new String(message.getBody());
    JSONObject obj = (JSONObject) JSONValue.parse(recmessage);
    System.out
        .println("Message Received  " + (String) obj.get("messageId"));
  }
}

给出答案的解决方案

您需要添加杰克逊的依赖。下面是 maven:

<dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.4.1</version>
    </dependency> 

添加到 Spring 配置

<bean id="amqpCorrectionTemplate" class="org.springframework.amqp.rabbit.core.RabbitTemplate">
    <property name="connectionFactory" ref="connectionFactory" />
    <property name="messageConverter">
        <bean
            class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter">
        </bean>
    </property>
</bean>

添加消息监听器

Jackson2JsonMessageConverter jmc = new Jackson2JsonMessageConverter();
JSONObject obj  = (JSONObject) jmc.fromMessage(message);

发送代码 只发送传入的JSON对象。

template.convertAndSend("TEST-EXCHANGE",
    "routing.test", messageJSON);

这个错误的问题:AMQP 协议(​​与任何其他基于线路的协议一样)仅处理字节,因此您的应用程序如何转换为 byte[] 和返回(如果它是 Java 当然无处不在)。

从另一方面来说,基于开箱即用转换器的配置会更好。例如 Jackson2JsonMessageConverter.

Documentation 中查看更多信息。