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();
MyMessageGateway
使用所需的负载创建类型为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集成,我会考虑一个问题。