Spring Integration - Header Enricher

Reference

Enrich Header XML
  1. Header-enricher 可以改變 msg 的 header, 這裡把 mykey 加入 message
  2. Transformer 可以透過 @Header 或 @Headers 來取得 headers
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:int="http://www.springframework.org/schema/integration"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/integration
        http://www.springframework.org/schema/integration/spring-integration-5.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    <context:component-scan base-package="examples"/>
    <int:header-enricher input-channel="input" output-channel="inteceptor">
        <int:header name="mykey" value="myval" />
    </int:header-enricher>

    <int:transformer input-channel="inteceptor" output-channel="output" ref="mapper" />


    <int:channel id="inteceptor" />
    <int:channel id="input"/>
    <int:channel id="output">
        <int:queue capacity="10"/>
    </int:channel>
</beans>

HeaderEnricherMain
public class HeaderEnricherMain {

    public static void main(String[] params) {
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:HeaderEnricherMain.xml");
        MessageChannel input = ctx.getBean("input", MessageChannel.class);
        input.send(MessageBuilder.withPayload("test").build());


        PollableChannel output = ctx.getBean("output", PollableChannel.class);
        System.out.println(output.receive().getHeaders().get("mykey")); // print myval
    }

}


Transformer 用 @Header or @Headers 取值
@Component
public class Mapper {

    @Transformer
    public TextMessage map(Map<String, String> message) {
        System.out.println("transform from " + message + " to TextMessage");
        return new TextMessage(message.get("text"));
    }

    @Transformer
    public TextMessage map(String message) {
        System.out.println("transform from string to TextMessage");
        return new TextMessage(message);
    }

    @Transformer
    public TextMessage mapMyKey(@Header("mykey") String myval, @Headers Map<String,String> headerMap, String message) {
        System.out.println("headerMap:" + headerMap);
        return new TextMessage(myval); // myval
    }

}




沒有留言:

張貼留言

別名演算法 Alias Method

 題目 每個伺服器支援不同的 TPM (transaction per minute) 當 request 來的時候, 系統需要馬上根據 TPM 的能力隨機找到一個適合的 server. 雖然稱為 "隨機", 但還是需要有 TPM 作為權重. 解法 別名演算法...