简体   繁体   中英

XML to java DSL for spring integration including UDP channel adapter

I would like to convert my XML config to Java dsl, but I can not find an example for int-ip:udp-inbound-channel-adapter in java dsl. There is TcpNetServerConnectionFactory for TCP but nothing for UDP. Only that class is subclassing AbstractServerConnectionFactory . XML config related to spring integration is bellow.

<int-ip:udp-inbound-channel-adapter
        id="receiverChannel" channel="udpReceivedChannel" port="1206" multicast="false"
        check-length="false" lookup-host="false" pool-size="20"/>

    <int:transformer id="convertTransformer" input-channel="convertChannel"
        output-channel="toProcessChannel" ref="transformer" method="transform">
    </int:transformer>

    <int:service-activator id="accumulateActivator" input-channel="udpReceivedChannel"
                           output-channel="convertChannel"
                           ref="accumulator" method="accumulate">
    </int:service-activator>

    <int:service-activator id="cssenderAcivator" input-channel="sendToCMSChannel"
                           ref="cssender" method="sendToCS">
    </int:service-activator>

    <int:service-activator id="jackpotRaiseActivator" input-channel="toProcessChannel"
                           ref="jackpotraise" method="raise" >
    </int:service-activator>

    <int:service-activator id="jackpotScreenActivator" input-channel="jackpotScreenChannel"
                           ref="jackpotscreen" method="updateJackpotsOnDisplay" >
    </int:service-activator>

    <int:channel id="udpReceivedChannel">
        <int:dispatcher task-executor="accumulateExecutor"/>
        <!--<int:queue message-store="redisMessageStore"/>--> <!-- ovo nam ne treba bez da nesto externo trpa u redis-->
    </int:channel>

    <int:channel id="toProcessChannel">
        <int:dispatcher task-executor="jackpotRaiseExecutor"/>
        <int:interceptors>
            <int:wire-tap channel="sendToCMSChannel"/>
        </int:interceptors>
    </int:channel>

    <int:channel id="convertChannel">
        <int:dispatcher task-executor="transformerExecutor"/>
    </int:channel>

    <int:channel id="sendToCMS">
        <int:dispatcher task-executor="cmsSenderExecutor"/>
    </int:channel>

    <int:channel id="jackpotScreenChannel">
        <int:dispatcher task-executor="jackpotScreenExecutor"/>
    </int:channel>

    <task:executor id="accumulateExecutor" pool-size="20" keep-alive="120" />

    <task:executor id="jackpotRaiseExecutor" pool-size="20" keep-alive="120" />

    <task:executor id="transformerExecutor" pool-size="20" keep-alive="120" />

    <task:executor id="cmsSenderExecutor" pool-size="20" keep-alive="120" />

    <task:executor id="jackpotScreenExecutor" pool-size="400" keep-alive="500" />

Here's a quick boot app that creates an adapter and sends a packet to it...

@SpringBootApplication
public class So40286815Application {

    public static void main(String[] args) throws Exception {
        ConfigurableApplicationContext context = SpringApplication.run(So40286815Application.class, args);
        DatagramSocket socket = new DatagramSocket();
        DatagramPacket packet = new DatagramPacket("foo".getBytes(), 3);
        packet.setAddress(InetAddress.getLocalHost());
        packet.setPort(1206);
        socket.send(packet);
        Thread.sleep(10000);
        socket.close();
        context.close();
    }

    @Bean
    public UnicastReceivingChannelAdapter inbound() {
        UnicastReceivingChannelAdapter adapter = new UnicastReceivingChannelAdapter(1206);
        adapter.setOutputChannelName("foo");
        return adapter;
    }

    @ServiceActivator(inputChannel = "foo")
    public void handle(byte[] bytes) {
        System.out.println(new String(bytes));
    }

}

and with the DSL...

@Bean
public UnicastReceivingChannelAdapter inbound() {
    return new UnicastReceivingChannelAdapter(1206);
}

@Bean
public IntegrationFlow flow() {
    return IntegrationFlows.from(inbound())
            .handle(System.out::println)
            .get();
}

or, simply...

@Bean
public IntegrationFlow flow() {
    return IntegrationFlows.from(new UnicastReceivingChannelAdapter(1206))
            .transform(new ObjectToStringTransformer())
            .handle(m -> System.out.println(m.getPayload()))
            .get();
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM