SpringBoot 集成Netty实现UDP Server

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

UDPServer

1package com.vmware.vCenterEvent.netty; 2 3import io.netty.bootstrap.Bootstrap; 4import io.netty.channel.*; 5import io.netty.channel.nio.NioEventLoopGroup; 6import io.netty.channel.socket.nio.NioDatagramChannel; 7import lombok.extern.log4j.Log4j2; 8import org.springframework.boot.ApplicationArguments; 9import org.springframework.boot.ApplicationRunner; 10import org.springframework.stereotype.Component; 11 12@Log4j2 13@Component 14public class UdpServer implements ApplicationRunner { 15 16 private final Bootstrap bootstrap; 17 18 private final NioEventLoopGroup group; 19 20 private Channel channel; 21 22 private void Start() throws InterruptedException { 23 try { 24 channel = bootstrap.bind("0.0.0.0", 8888).sync().channel(); 25 System.out.println("UdpServer start success"); 26 channel.closeFuture().await(); 27 } finally { 28 group.shutdownGracefully(); 29 } 30 } 31 32 private static final class NettyUdpServerHolder { 33 static final NettyUdpServer INSTANCE = new NettyUdpServer(); 34 } 35 36 public static NettyUdpServer getInstance() { 37 return NettyUdpServerHolder.INSTANCE; 38 } 39 40 private NettyUdpServer() { 41 group = new NioEventLoopGroup(); 42 bootstrap = new Bootstrap(); 43 bootstrap.group(group) 44 .channel(NioDatagramChannel.class) 45 .option(ChannelOption.SO_BROADCAST, true) 46 .option(ChannelOption.SO_RCVBUF, 1024 * 1024 * 100) 47 .handler(new ChannelInitializer<Channel>() { 48 @Override 49 protected void initChannel(Channel channel) throws Exception { 50 ChannelPipeline pipeline = channel.pipeline(); 51 pipeline.addLast(new NettyUdpServerHandler()); 52 } 53 }); 54 } 55 56 @Override 57 public void run(ApplicationArguments args) throws Exception { 58 NettyUdpServer.getInstance().Start(); 59 } 60}

UDPServerHandler

1import com.vmware.vCenterEvent.domain.Syslog; 2import io.netty.channel.ChannelHandlerContext; 3import io.netty.channel.SimpleChannelInboundHandler; 4import io.netty.channel.socket.DatagramPacket; 5import io.netty.util.CharsetUtil; 6import lombok.extern.log4j.Log4j2; 7import org.springframework.beans.factory.annotation.Autowired; 8import org.springframework.beans.factory.annotation.Value; 9import org.springframework.jms.core.JmsMessagingTemplate; 10import org.springframework.stereotype.Component; 11 12import javax.annotation.PostConstruct; 13 14@Log4j2 15@Component 16public class NettyUdpServerHandler extends SimpleChannelInboundHandler<DatagramPacket> { 17 18 public static NettyUdpServerHandler nettyUdpServerHandler; 19 20 @Autowired 21 private JmsMessagingTemplate jmsMessagingTemplate; 22 23 public NettyUdpServerHandler(){ 24 } 25 26 @PostConstruct 27 public void init(){ 28 nettyUdpServerHandler = this; 29 nettyUdpServerHandler.jmsMessagingTemplate = this.jmsMessagingTemplate; 30 } 31 32 @Override 33 protected void channelRead0(ChannelHandlerContext ctx, DatagramPacket msg) { 34 // log.info("开始接收数据"); 35 String msgString = msg.content().toString(CharsetUtil.UTF_8);     // 将接收到数据放入ActiveMQ队列中 36 nettyUdpServerHandler.jmsMessagingTemplate.convertAndSend("mq", msgString); 37 } 38 39}
点赞
收藏

评论区

加载中...

相关推荐

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

thinkcmf+jsapi 实现微信支付

首先从小程序端接收订单号、金额等参数,然后后台进行统一下单,把微信支付的订单号返回,在把订单号发送给前台,前台拉起支付,返回参数后更改支付状态。。。回调publicfunctionnotify(){$wechatDb::name('wechat')where('status',1)find();

docker-常用命令

1.帮助启动类命令:systemctlstartdocker启动Dockersystemctlstopdocker停止Dockersystemctlrestartdocker重启Dockersystemctlstatusdocker查看Docker状态systemctlenabledocker开机自启动d

CentOS 7设置开机启动服务,添加自定义系统服务

CentOS7设置开机启动服务建立服务文件保存目录设置开机自启动其他命令1.建立服务文件文件路径vim/usr/lib/systemd/system/nginx.service服务文件内容1.ngin

Centos6 使用yum快速搭建LAMP环境

1、安装Apache\root@localhost~\yumyinstallhttpd\开机自启动\root@localhost~\chkconfighttpdon\启动httpd服务\root@localhost~\servicehttpdstart\安装apache