Spring integration 是否可以将RabbitMessagingTemplate用作AMQOutboundEndpoint?

Spring integration 是否可以将RabbitMessagingTemplate用作AMQOutboundEndpoint?,spring-integration,spring-amqp,Spring Integration,Spring Amqp,我对spring集成非常陌生。我正在尝试集成一个IntegrationFlow哪个端点是amqoutboundendpoint: return IntegrationFlows.from("ordersChannel") .handle(Amqp.outboundAdapter(rabbitTemplate) .exchangeName(exchangeName) .routingKey(ro

我对
spring集成非常陌生。我正在尝试集成一个
IntegrationFlow
哪个端点是
amqoutboundendpoint

return IntegrationFlows.from("ordersChannel")
            .handle(Amqp.outboundAdapter(rabbitTemplate)
                    .exchangeName(exchangeName)
                    .routingKey(routingKey))
            .get();
My
MessageGateway
使用所需的负载创建类型为
org.springframework.messaging.support.GenericMessage
的实例:

@MessagingGateway
public interface OrderDispatchService {


    @Gateway(requestChannel = "ordersChannel")
    void sendOrder(final Order order);
}
我确实希望outboundEndpoint创建amqp消息,就像
RabbitMessagingTemplate
一样。查看amqp消息的
org.springframework.messaging.support.GenericMessage
。 但是
AmqpOutboundEndpoint
只是将
amqpmetlate
作为参数。我怎样才能做到这一点?任何转换原始消息的尝试都会失败,因为端点只需打开消息并获取原始有效负载。也许我偏离了轨道

更新:

我现在做了以下工作:

.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
头的值复制到等效的amqp头。

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

两者都在盖子下使用一个
rabbitemplate


RabbitMessagingTemplate
适用于使用spring消息传递但不使用spring集成的用户


如果您能准确解释问题所在,我们可以提供进一步帮助。

RabbitMessagingTemplate
创建一条RabbitMQ消息,该消息与原始的
o.s.messaging.message
相同。但是
amqoutboundendpoint
创建的消息只包含
o.s.messaging.message
的原始有效负载。我想使用spring集成来处理/创建消息,并能够将出站通道适配器用于rabbitMQ,该适配器以与RabbitMessagingTemplate相同的方式发送/转换
o.s.messaging.message
s。我希望我能更好地解释我的问题。我不知道你说的“完全相同”是什么意思;一个是
o.s.m.消息
,另一个是rabbitmq消息,因此它们不能“完全相同”;也许您正在谈论头映射;Spring Integration默认情况下不映射用户定义的头,但您可以通过将
.mappedRequestHeaders(“*”
)添加到流定义中来指示它这样做。是的,我说的是头,amqp消息包含
o.s.messaging.message
id
timestamp
如果通过
RabbitMessagingTemplate
转换,则开箱即用。集成
DefaultAmqpHeaderMapper
不会映射这些头;为此,需要创建映射器的子类。从历史上看,这些头是SI内部的,当添加到Spring AMQP时,
o.s.messaging
支持可能不应该泄露这些头。如果您认为我们应该为SI添加一个选项以提供与
RabbitMessagingTemplate
兼容的映射,请随时打开一个。我将尝试通过对头部映射器进行子类化来实现该选项。也许,如果我深入研究spring集成,我会考虑一个问题。