将RabbitTemplate.convertSendAndReceive与org.springframework.messaging.Message一起使用

时间:2018-04-04 11:35:15

标签: rabbitmq spring-amqp

我已成功使用以下内容发送org.springframework.amqp.core.Message并收到byte []

import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate;

Message message = 
MessageBuilder.withBody(payload)..setCorrelationIdString(id).build();
byte [] response = (byte[]) rabbitTemplate.convertSendAndReceive(message,m -> {
        m.getMessageProperties().setCorrelationIdString(id);

如果队列设置为正确处理Message<?>的消息,则此方法可以正常工作。但是我有一系列队列使用消息类型org.springframework.messaging.Message专门Message<String>

有没有办法可以使用rabbitTemplate.convertSendAndReceive发送org.springframework.messaging.Message消息&lt;串取代。以下是可行的。

import org.springframework.messaging.Message; 
import org.springframework.integration.support.MessageBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate;

Message<String> message = 
MessageBuilder.withPayload(payload).setCorrelationId(id).build();
Object returnObject = rabbitTemplate.convertSendAndReceive(message);

我查看了MessageConverter,但我不确定是否可以使用它。

或者,我应该使用org.springframework.messaging.core.GenericMessagingTemplate.convertSendAndReceive

更新。

如果我从

改变队列中的内容,我可以使它工作

@Transformer(inputChannel = Processor.INPUT, outputChannel = Processor.OUTPUT) public Message<String> transform(Message<String> inMessage) {

@Transformer(inputChannel = Processor.INPUT, outputChannel = Processor.OUTPUT) public Message<String> transform(Message<?> inMessage) { GenericMessage<?> genericMessage = (GenericMessage<?>)inMessage.getPayload(); String payload = (String)genericMessage.getPayload();

但我宁愿不必更改变换器来使其工作,因为有问题的代码用于集成测试,现有代码已经与我已有的一起工作。

END UPDATE

我想我已经提供了足够的信息,但如果需要更多细节,请告诉我。理想情况下,我正在寻找代码示例或指向我回答我的问题的文档。

1 个答案:

答案 0 :(得分:0)

使用RabbitMessagingTemplate documentation here

public Message<?> sendAndReceive(String exchange, String routingKey, Message<?> requestMessage)