我使用@StreamListener注釋來聽主題。如何從正文添加欄位到條件?發送到主題的物體示例:
public class Event {
private String eventId = UUID.randomUUID().toString();
private LocalDateTime eventTime = LocalDateTime.now();
private Entity entity;
}
public class Entity {
private String id = UUID.randomUUID().toString();
private String name;
}
uj5u.com熱心網友回復:
從版本 3.0可以看出,您應該避免使用基于訊息有效負載的過濾。請注意檔案中的這些行:
前面的代碼是完全有效的。它編譯和部署沒有任何問題,但它永遠不會產生您期望的結果。
那是因為您正在測驗在您期望的狀態下尚不存在的東西。這是因為訊息的有效負載尚未從有線格式 (byte[]) 轉換為所需型別
因此,除非您使用 SPeL 運算式來評估原始資料(例如,位元組陣列中第一個位元組的值),否則請使用基于訊息頭的運算式(例如 condition = "headers['type']=='dog '")。
因此,對于您的情況,您可以在訊息中再添加一個標題,并使用標題上的條件進行過濾,例如:
Message<Event> message = MessageBuilder.withPayload(event)
.setHeader(KafkaHeaders.MESSAGE_KEY, event.getRequestId().toString().getBytes(StandardCharsets.UTF_8))
.setHeader("entityName", event.getEnity().getName().getBytes(StandardCharsets.UTF_8))
.build();
this.streamBridge.send("binding", message);
現在你的情況是 condition = "headers['entityName']=='ABCName'"
注意:基于注解的編程模型。基本上@EnableBinding、@StreamListener 和所有相關的注釋現在從版本 3.x 中被棄用
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/346863.html
上一篇:將Java物件轉換為物件串列
