Spring Cloud Stream Kafka รองรับส่วนหัวแบบฝังหรือไม่

ตามหัวข้อนี้:
Kafka Spring Integration: Headers not มาสำหรับผู้บริโภคคาฟคา - นี่ไม่ใช่การสนับสนุนส่วนหัวสำหรับคาฟคา

แต่เอกสารประกอบ พูดว่า:

spring.cloud.stream.kafka.binder.headers
รายการส่วนหัวแบบกำหนดเองที่จะถูกส่งโดย Binder

ค่าเริ่มต้น: ว่างเปล่า

ฉันไม่สามารถทำให้มันใช้งานได้กับ spring-cloud-stream-binder-kafka: 1.2.0.RELEASE

การส่งบันทึก:

MESSAGE (e23885fd-ffd9-42dc-ebe3-5a78467fee1f) SENT : 
GenericMessage [payload=..., 
headers={
   content-type=application/json, 
   correlationId=51dd90b1-76e6-4b8d-b667-da25f214f383, 
   id=e23885fd-ffd9-42dc-ebe3-5a78467fee1f, 
   contentType=application/json, 
   timestamp=1497535771673
}]

บันทึกการรับ:

MESSAGE (448175f5-2b21-9a44-26b9-85f093b33f6b) RECEIVED BY HANDLER 1: 
GenericMessage [payload=..., 
headers={
    kafka_offset=36, 
    id=448175f5-2b21-9a44-26b9-85f093b33f6b, 
    kafka_receivedPartitionId=0, 
    contentType=application/json;charset=UTF-8, 
    kafka_receivedTopic=new_patient, timestamp=1497535771715
}]

MESSAGE (448175f5-2b21-9a44-26b9-85f093b33f6b) RECEIVED BY HANDLER 2 :
GenericMessage [payload=..., 
headers={
    kafka_offset=36, 
    id=448175f5-2b21-9a44-26b9-85f093b33f6b, 
    kafka_receivedPartitionId=0, 
    contentType=application/json;charset=UTF-8, 
    kafka_receivedTopic=new_patient, timestamp=1497535771715
}]

ฉันคาดว่าจะเห็นข้อความเดียวกัน id และได้รับ correlationId ในด้านรับ

ใบสมัครคุณสมบัติ:

spring.cloud.stream.kafka.binder.headers=correlationId
spring.cloud.stream.bindings.newTest.destination=new_test
spring.cloud.stream.bindings.newTestCreated.destination=new_test
spring.cloud.stream.default.consumer.headerMode=embeddedHeaders
spring.cloud.stream.default.producer.headerMode=embeddedHeaders

การส่งข้อความ:

@Publisher(channel = "testChannel")
public Object newTest(Object param) {
    ...
    return myObject;
}

comment
คุณช่วยยกตัวอย่างสิ่งที่คุณพยายามจะทำได้ไหม?   -  person Marius Bogoevici    schedule 15.06.2017
comment
@MariusBogoevici โปรดดูการอัพเดตโพสต์ ...   -  person S2201    schedule 15.06.2017


คำตอบ (1)


ใช่ เป็นเช่นนั้น: http://docs.spring.io/spring-cloud-stream/docs/Chelsea.SR2/reference/htmlsingle/index.html#_consumer_properties

โหมดส่วนหัว

เมื่อตั้งค่าเป็น Raw จะปิดใช้งานการแยกวิเคราะห์ส่วนหัวในอินพุต มีผลเฉพาะกับมิดเดิลแวร์การรับส่งข้อความที่ไม่รองรับส่วนหัวของข้อความโดยกำเนิดและจำเป็นต้องฝังส่วนหัว มีประโยชน์เมื่อข้อมูลขาเข้ามาจากแอปพลิเคชัน Spring Cloud Stream ภายนอก

ค่าเริ่มต้น: EmbeddedHeaders

แต่นั่นเป็นเรื่องราวของ Spring Cloud Stream อยู่แล้ว ไม่ใช่ Spring Kafka ต่อตัว

person Artem Bilan    schedule 15.06.2017
comment
ไม่ แต่โดยค่าเริ่มต้นจะมีการขนส่งส่วนหัวเพียงชุดย่อยเท่านั้น - ดู github.com/spring-cloud/spring-cloud-stream/blob/master/ หากคุณต้องการขนส่งส่วนหัวของคุณเอง คุณสามารถเพิ่มชื่อให้กับทรัพย์สินที่ Artem จัดเตรียมไว้ได้ - person Marius Bogoevici; 15.06.2017
comment
ขอบคุณสำหรับคำตอบของคุณ! แต่นี่เป็นคำถามจริงๆ - มันควรจะใช้งานได้ตามเอกสารประกอบ แต่ก็ไม่ได้เป็นเช่นนั้น กรุณาดูการอัปเดต ฉันได้เพิ่มบันทึกและการกำหนดค่าแล้ว - person S2201; 15.06.2017
comment
ดูการอัปเดตของฉันสำหรับ คำถามอื่น ๆ ที่คุณ แสดงความคิดเห็นใน - ฉันทดสอบตัวอย่างนั้นด้วย Dalston.SR1 (1.2.1) และใช้งานได้ดี - person Gary Russell; 15.06.2017
comment
โปรเจ็กต์ที่อัปเดตอยู่ใน repo แซนด์บ็อกซ์ ของฉัน - person Gary Russell; 15.06.2017
comment
ขอบคุณอีกครั้งนะเพื่อนๆ ปัญหาอยู่ในการส่งข้อความ (เพิ่มในคำถาม) ข้อความที่บันทึกไม่ใช่ข้อความที่ส่ง :-) ตอนนี้ฉันสามารถส่งส่วนหัวที่กำหนดเองได้แล้ว ID ข้อความควรเหมือนกันทั้งฝั่งผู้ผลิตและฝั่งผู้รับหรือไม่ - person S2201; 15.06.2017
comment
รหัสข้อความควรถือเป็นทรัพย์สินภายใน (ข้อความอาจได้รับการเปลี่ยนแปลงภายในระหว่าง Spring Integration, Spring Kafka, Spring Cloud Stream) ตามหลักการแล้ว คุณควรใช้ส่วนหัวที่คุณกำหนดเองเพื่อถ่ายทอดข้อมูลระบุตัวตนของข้อความ - person Marius Bogoevici; 15.06.2017
comment
ใช่ขอบคุณ. ฉันมีคำถามตามมาอีกหนึ่งข้อ แต่ฉันโพสต์ไว้ในเธรดแยก - person S2201; 15.06.2017