如何使用 Spring 集成从 Java bean 正确创建 RabbitMQ 自定义消息?

How to properly create RabbitMQ custom message from Java bean with Spring Integration?

我是 Spring 集成方面的新手,也许这个问题很简单。我正在查看示例 (https://github.com/spring-projects/spring-integration-samples/tree/master/basic/amqp) 从标准输入创建 RabbitMq 消息:

<int-stream:stdin-channel-adapter id="consoleIn"
    channel="toRabbit">
    <int:poller fixed-delay="1000" max-messages-per-poll="1" />
</int-stream:stdin-channel-adapter>
<int:channel id="toRabbit" />
<int-amqp:outbound-channel-adapter
    channel="toRabbit" amqp-template="amqpTemplate"
    exchange-name-expression="payload.toLowerCase() == 'nack' ? 'badExchange' : 'si.test.exchange'"
    routing-key-expression="payload.toLowerCase() == 'fail' ? 'badKey' : 'si.test.binding'"
    confirm-correlation-expression="payload"
    confirm-ack-channel="good"
    confirm-nack-channel="errors"
    return-channel="returns" />

如果我们需要用 Java 代码生成自定义消息怎么办。什么是合适的优雅代码?用于填充消息的 bean 已简化:

package com.mycompany.domain.price;    
public class UpdateMessage implements Serializable {
Date effStartDate;
Date effEndDate;
Long orderId = -1;
String customerFullName;
...
}

参见;尽管它谈论的是 Axis 而不是 RabbitMQ;同样的技术也适用。

由于您的 UpdateMessage 实现了 Serializable,标准消息转换器将为您负责转换为 byte[]

发送消息没有回复,您的网关接口方法可能是

public void send(UpdateMessage msg);

在这种情况下,您将使用出站通道适配器。如果你想得到回复,使用 amqp 出站网关,服务接口可能看起来像

public UpdateResult send(UpdateMessage msg);

如果您不使用 Serializable 对象,则使用 json 转换器可能更合适。