SpringBoot 통합 Netty UDP 서버 구현
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() {
@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 {
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);
}
}
다음으로 전송:https://www.cnblogs.com/vincenshen/p/10759422.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.