次のコードがあります。
@Service
@EnableBinding(Sink.class)
public class AMQPService {
ObjectMapper mapper = new ObjectMapper();
@Autowired
private BinderAwareChannelResolver binderAwareChannelResolver;
@StreamListener(Sink.INPUT)
public void processMessage(@Payload Map<String, Object> inboundMessage, @Headers Map<String, Object> headers) throws JsonParseException, JsonMappingException, IOException {
headers.entrySet().forEach(e -> System.out.println(e.getKey() + '=' + e.getValue()));
String output = mapper.writeValueAsString(inboundMessage);
AMQPOutboundMessage outMessage = new AMQPOutboundMessage();
outMessage.setText(output);
if (headers.containsKey("expected_destination")) {
MessageChannel messageChannel = binderAwareChannelResolver.resolveDestination(headers.get("expected_destination").toString());
messageChannel.send(MessageBuilder.withPayload(outMessage).setHeader("contentType", "application/json;charset=UTF-8").build());
}
}
}
RabbitMQ から amqp メッセージを取得し、「expected_destination」ヘッダーに従ってメッセージを宛先に送信します。
を設定spring.cloud.stream.bindings.output.content-type=application/json;charset=UTF-8しましたが、メッセージの content-type がapplication/x-java-object;type=xxx.AMQPOutboundMessagebase64 でエンコードされたメッセージ本文であることがわかりました。
しかし、@AutowiredmessageChannel を取得するために使用すると、すべて問題ないようです。
この場合、コンテンツタイプを設定する方法を教えてください。