UDP сервер на базе Apache Camel - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь использовать Apache Camel для создания сервера 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.

Любой может предоставить полный примерUDP-сервер с верблюдом, который использует простое текстовое декодирование всех входящих сообщений?

1 Ответ

0 голосов
/ 06 июня 2018

Вместо того, чтобы создавать syslog-потребитель и декодер самостоятельно, взгляните на Camel syslog DataFormat .

На связанной странице документации вы можете найти примеры syslog-customer с нетто и мина компоненты.

...