버전 2.0.0의 Java Spring을 사용하고 있습니다. AMQP의 스냅 샷. AMQP 메시지를 작성하여 보냅니다. 다른 서비스에서는 Object를받는 대신 머리글을 제외하고 올바르게 메시지를받습니다. 모든 헤더는 String 유형입니다.스프링 AMQP 헤더가 문자열로만 반환됩니다
게시자 코드 :
소비자 코드Message responseMessage = MessageBuilder
.withBody(SerializationUtils.serialize(person))
.setContentType(MessageProperties.CONTENT_TYPE_SERIALIZED_OBJECT)
.setHeader("STUDENT_TYPE", "New") // Not part of person object but related
.setHeader("PET", getPet()) // This is a pet object
.build();
rabbitTemplate.send(responseMessage);
: 나는 위의 코드를 실행하면
Object messageBody = SerializationUtils.deserialize(amqpMessage.getBody());
Person person = (Person)messageBody;
MessageProperties properties = amqpMessage.getMessageProperties();
String type = properties.getHeaders().get("STUDENT_TYPE").toString();
Pet pet = (Pet)properties.getHeaders().get("PET");
, 나는 오류가있는 소비자 코드의 마지막 줄에 실패는 : 문자열로 캐스팅 할 수 없습니다 착한 애. 모든 헤더가 소비자 코드에서 수신되면 String 유형 인 것을 제외하고는 메시지가 정상적으로 나타납니다.
USAGE: MessageBuilder.setHeader(String Key, Object Value);
USAGE: Properties.getHeaders() returns Map<String,Object>
모든 헤더에는 String/Object 유형의 키/값 쌍이 있습니다. 내가 가지고있는 주위의 작업은 또한 비 문자열/정수 값을 전달하고 싶습니다 헤더를 serialize하는 것입니다,하지만 이것은 헤더의 포인트 외의 것으로 보인다. 내가 놓친 게 있니?
"String"이 실제로 애완 동물이라고 명시하는 곳은 어디입니까? 머리글을 채우고 있습니다. 헤더는 단순히지도 항목입니다. 이 맵 항목 (이 키 값 쌍)은 - KEY 유형이 STRING이고 VALUE가 OBJECT입니다. -, headers.put ("MyNewPet", myDog); -하지만 다른면에서 헤더에서 빠져 나오면 갑자기 Map이 가됩니다 - 오브젝트에 무슨 일이 일어 났습니까? –
Aerith
아마 amqp가 당신의 객체를 바이트로 직렬화하지 않기 때문일 것입니다. 아마도 가장 많이 사용되는 것은 toString()을 호출하고 브로커를 통해 문자열을 전달하기 때문일 것입니다. 내가 아는 한이 대기열은 문자열 만 전달합니다. –