【问题标题】:XML to java DSL for spring integration including UDP channel adapter用于 Spring 集成的 XML 到 Java DSL,包括 UDP 通道适配器
【发布时间】:2016-10-27 14:08:19
【问题描述】:

我想将我的 XML 配置转换为 Java dsl,但我在 java dsl 中找不到int-ip:udp-inbound-channel-adapter 的示例。 TCP 有 TcpNetServerConnectionFactory,但 UDP 没有。只有该类是 AbstractServerConnectionFactory 的子类。与 Spring 集成相关的 XML 配置如下。

<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" />

【问题讨论】:

    标签: spring spring-integration spring-dsl


    【解决方案1】:

    这是一个创建适配器并向其发送数据包的快速启动应用程序...

    @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));
        }
    
    }
    

    并且使用 DSL...

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

    或者,简单地说……

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

    【讨论】:

    • 我也添加了一个 DSL 示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2018-10-26
    • 2014-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多