• SpringBoot 集成Netty实现UDP Server


    注:ApplicationRunner 接口是在容器启动成功后的最后一步回调(类似开机自启动)。

    UDPServer

    package com.vmware.vCenterEvent.netty;
    
    import io.netty.bootstrap.Bootstrap;
    import io.netty.channel.*;
    import io.netty.channel.nio.NioEventLoopGroup;
    import io.netty.channel.socket.nio.NioDatagramChannel;
    import lombok.extern.log4j.Log4j2;
    import org.springframework.boot.ApplicationArguments;
    import org.springframework.boot.ApplicationRunner;
    import org.springframework.stereotype.Component;
    
    @Log4j2
    @Component
    public class UdpServer implements ApplicationRunner {
    
        private final Bootstrap bootstrap;
    
        private final NioEventLoopGroup group;
    
        private Channel channel;
    
        private void Start() throws InterruptedException {
            try {
                channel = bootstrap.bind("0.0.0.0", 8888).sync().channel();
                System.out.println("UdpServer start success");
                channel.closeFuture().await();
            } finally {
                group.shutdownGracefully();
            }
        }
    
        private static final class NettyUdpServerHolder {
            static final NettyUdpServer INSTANCE = new NettyUdpServer();
        }
    
        public static NettyUdpServer getInstance() {
            return NettyUdpServerHolder.INSTANCE;
        }
    
        private NettyUdpServer() {
            group = new NioEventLoopGroup();
            bootstrap = new Bootstrap();
            bootstrap.group(group)
                    .channel(NioDatagramChannel.class)
                    .option(ChannelOption.SO_BROADCAST, true)
                    .option(ChannelOption.SO_RCVBUF, 1024 * 1024 * 100)
                    .handler(new ChannelInitializer<Channel>() {
                        @Override
                        protected void initChannel(Channel channel) throws Exception {
                            ChannelPipeline pipeline = channel.pipeline();
                            pipeline.addLast(new NettyUdpServerHandler());
                        }
                    });
        }
    
        @Override
        public void run(ApplicationArguments args) throws Exception {
            NettyUdpServer.getInstance().Start();
        }
    }

    UDPServerHandler

    import com.vmware.vCenterEvent.domain.Syslog;
    import io.netty.channel.ChannelHandlerContext;
    import io.netty.channel.SimpleChannelInboundHandler;
    import io.netty.channel.socket.DatagramPacket;
    import io.netty.util.CharsetUtil;
    import lombok.extern.log4j.Log4j2;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.jms.core.JmsMessagingTemplate;
    import org.springframework.stereotype.Component;
    
    import javax.annotation.PostConstruct;
    
    @Log4j2
    @Component
    public class NettyUdpServerHandler extends SimpleChannelInboundHandler<DatagramPacket> {
    
        public static NettyUdpServerHandler nettyUdpServerHandler;
    
        @Autowired
        private JmsMessagingTemplate jmsMessagingTemplate;
    
        public NettyUdpServerHandler(){
        }
    
        @PostConstruct
        public void init(){
            nettyUdpServerHandler = this;
            nettyUdpServerHandler.jmsMessagingTemplate = this.jmsMessagingTemplate;
        }
    
        @Override
        protected void channelRead0(ChannelHandlerContext ctx, DatagramPacket msg) {
            // log.info("开始接收数据");
            String msgString = msg.content().toString(CharsetUtil.UTF_8);

         // 将接收到数据放入ActiveMQ队列中 nettyUdpServerHandler.jmsMessagingTemplate.convertAndSend("mq", msgString); } }
  • 相关阅读:
    React中jquery引用
    实现table的单线边框的办法
    学习网站
    React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: undefined.
    使用rgba设置输入框背景透明
    转: HTML5之placeholder属性以及如何更改placeholder属性中文字颜色
    转:jquery操作元素的css样式(获取、修改等等)
    购物车抛物线动画效果
    转: jquery.qrcode.js生成二维码插件&转成图片格式
    Chatbot中的填槽(Slot Filling)(转)
  • 原文地址:https://www.cnblogs.com/vincenshen/p/10759422.html
Copyright © 2020-2023  润新知