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 中查看更多信息。
如果使用 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 中查看更多信息。