是否可以使用 RabbitMessagingTemplate 作为 AmqpOutboundEndpoint?

Is it possible to use a RabbitMessagingTemplate as AmqpOutboundEndpoint?

我是 spring-integration 的新手。我正在尝试集成一个 IntegrationFlow 端点是一个 AmqpOutboundEndpoint:

return IntegrationFlows.from("ordersChannel")
            .handle(Amqp.outboundAdapter(rabbitTemplate)
                    .exchangeName(exchangeName)
                    .routingKey(routingKey))
            .get();

我的 MessageGateway 使用我想要的有效负载创建类型 org.springframework.messaging.support.GenericMessage 的实例:

@MessagingGateway
public interface OrderDispatchService {


    @Gateway(requestChannel = "ordersChannel")
    void sendOrder(final Order order);
}

我确实希望 outboundEndpoint 像 RabbitMessagingTemplate 一样创建 amqp 消息。 org.springframework.messaging.support.GenericMessage 看起来是 amqp 消息。 但是 AmqpOutboundEndpoint 只是将 AmqpTemplate 作为参数。我怎样才能做到这一点?任何转换原始消息的尝试都会失败,因为端点只是简单地解包消息并获取原始有效负载。也许我偏离了轨道?

更新:

我现在做了以下事情:

.enrichHeaders(s -> s.headerExpressions(h -> h
                    .put(AmqpHeaders.MESSAGE_ID, "headers.id.toString()")
                    .put(AmqpHeaders.TIMESTAMP, "new java.util.Date(headers.timestamp)")))

这会将原始 org.springframework.messaging.support.GenericMessage headers 的值复制到等效的 amqp headers。

不清楚你的意思; RabbitMessagingTemplate 执行与 AmqpOutboundEndpoint 类似的功能 - 将 o.s.messaging.Message 转换为 RabbitMQ 消息。

两者都在幕后使用 RabbitTemplate

RabbitMessagingTemplate 适用于使用 spring 消息但不使用 Spring 集成的人。

如果你能准确解释你的问题是什么,我们可以提供进一步的帮助。