spring-boot - 基于 Apache Camel 的 Udp 服务器
问题描述
我正在尝试使用 Apache Camel 创建使用 syslog 消息的 udp 服务器。
没有如何正确执行此操作的示例。
我编写了以下路线,它使用自定义 serverInitializerFactory。
@Component
public class MainRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
from("netty4:udp://{{app.server.host}}:{{app.server.port}}?serverInitializerFactory=#udpSyslogFlowFactory&sync=false&textline=true")
.to("seda:rowLogs");
from("seda:rowLogs?concurrentConsumers={{app.concurrent-processors}}")
.to("bean:logParser");
}
}
工厂代码:
@Component
public class UdpSyslogFlowFactory extends ServerInitializerFactory {
private int maxLineSize = 1024;
private NettyConsumer consumer;
public UdpSyslogFlowFactory() {
super();
}
public UdpSyslogFlowFactory(NettyConsumer consumer) {
this();
this.consumer = consumer;
}
@Override
protected void initChannel(Channel ch) throws Exception {
ChannelPipeline channelPipeline = ch.pipeline();
channelPipeline.addLast("encoder-SD", new StringEncoder(StandardCharsets.UTF_8));
channelPipeline.addLast("decoder-DELIM",
new DelimiterBasedFrameDecoder(maxLineSize, true, Delimiters.lineDelimiter()));
channelPipeline.addLast("decoder-SD", new StringDecoder(StandardCharsets.UTF_8));
channelPipeline.addLast("handler", new ServerChannelHandler(consumer));
}
@Override
public ServerInitializerFactory createPipelineFactory(NettyConsumer consumer) {
return new UdpSyslogFlowFactory(consumer);
}
}
看起来传入的 udp 消息没有被引用 StringDecoder 处理。
任何人都可以提供使用 Camel 对所有传入消息进行简单文本解码的 UDP 服务器的完整示例?
解决方案
与其自己构建 syslog-consumer 和解码器,不如看看Camel syslog DataFormat。
推荐阅读
- xaml - 如何更改 Shell Flyout 菜单的宽度/高度
- django - Django Rest Framework - 按动态键对数据进行分组
- ios - 触摸时如何将 UIButton 转换为 UISlider?
- spring - Spring验证器:如何通过使用选择字段的数据显示输入错误来重定向表单页面?
- javascript - 如何通过名称来定位对象方法?
- c# - 在 Azure 和 WebApi C# .Net Core 2.2 上托管的 React 应用程序上的 Sharepoint online/365 集成(上传文件)
- javascript - 启用“同步”时,隐藏/显示数据集也会同步?
- java - 如何通过 API 设置 application.properties 运行时?
- api - 我需要帮助查找 Paypal ClientID 和 ClientSecret ID
- vb.net - 在 Mysettingscolor 中保存颜色并返回