0

次のコードがあります。

@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 を取得するために使用すると、すべて問題ないようです。

この場合、コンテンツタイプを設定する方法を教えてください。

4

1 に答える 1