240.7. usage Samples


RouteBuilder builder = new RouteBuilder() {
  public void configure() {
    from("netty:udp://0.0.0.0:5155?sync=true")
      .process(new Processor() {
         public void process(Exchange exchange) throws Exception {
           Poetry poetry = (Poetry) exchange.getIn().getBody();
           poetry.setPoet("Dr. Sarojini Naidu");
           exchange.getOut().setBody(poetry);
         }
       }
    }
};
Copy to Clipboard Toggle word wrap
RouteBuilder builder = new RouteBuilder() {
  public void configure() {
       from("netty:tcp://0.0.0.0:5150")
           .to("mock:result");
  }
};
Copy to Clipboard Toggle word wrap

使用 JSSE 配置实用程序

自 Camel 2.9 起,Netty 组件通过 Camel JSSE 配置实用程序 支持 SSL/TLS 配置。这个工具大大减少了您需要写入的组件特定代码数量,并在端点和组件级别进行配置。以下示例演示了如何将 实用程序与 Netty 组件一起使用。

组件的编程配置

KeyStoreParameters ksp = new KeyStoreParameters();
ksp.setResource("/users/home/server/keystore.jks");
ksp.setPassword("keystorePassword");

KeyManagersParameters kmp = new KeyManagersParameters();
kmp.setKeyStore(ksp);
kmp.setKeyPassword("keyPassword");

SSLContextParameters scp = new SSLContextParameters();
scp.setKeyManagers(kmp);

NettyComponent nettyComponent = getContext().getComponent("netty", NettyComponent.class);
nettyComponent.setSslContextParameters(scp);
Copy to Clipboard Toggle word wrap

基于 Spring DSL 端点配置

...
  <camel:sslContextParameters
      id="sslContextParameters">
    <camel:keyManagers
        keyPassword="keyPassword">
      <camel:keyStore
          resource="/users/home/server/keystore.jks"
          password="keystorePassword"/>
    </camel:keyManagers>
  </camel:sslContextParameters>...
...
  <to uri="netty:tcp://0.0.0.0:5150?sync=true&ssl=true&sslContextParameters=#sslContextParameters"/>
...
Copy to Clipboard Toggle word wrap

在 Jetty 组件中使用基本 SSL/TLS 配置

JndiRegistry registry = new JndiRegistry(createJndiContext());
registry.bind("password", "changeit");
registry.bind("ksf", new File("src/test/resources/keystore.jks"));
registry.bind("tsf", new File("src/test/resources/keystore.jks"));

context.createRegistry(registry);
context.addRoutes(new RouteBuilder() {
  public void configure() {
      String netty_ssl_endpoint =
         "netty:tcp://0.0.0.0:5150?sync=true&ssl=true&passphrase=#password"
         + "&keyStoreFile=#ksf&trustStoreFile=#tsf";
      String return_string =
         "When You Go Home, Tell Them Of Us And Say,"
         + "For Your Tomorrow, We Gave Our Today.";

      from(netty_ssl_endpoint)
       .process(new Processor() {
          public void process(Exchange exchange) throws Exception {
            exchange.getOut().setBody(return_string);
          }
       }
  }
});
Copy to Clipboard Toggle word wrap

获取 SSLSession 和客户端证书的访问权限

从 Camel 2.12 开始提供

如果需要获取客户端证书的详细信息,您可以获得 javax.net.ssl.SSLSession 的访问权限。当 ssl=true 之后,Netty 组件会将 SSLSession 存储为 Camel 消息上的标头,如下所示: ???

SSLSession session = exchange.getIn().getHeader(NettyConstants.NETTY_SSL_SESSION, SSLSession.class);
// get the first certificate which is client certificate
javax.security.cert.X509Certificate cert = session.getPeerCertificateChain()[0];
Principal principal = cert.getSubjectDN();
Copy to Clipboard Toggle word wrap

记住设置 needClientAuth=true 以验证客户端,否则 SSLSession 无法访问客户端证书的相关信息,您可能会得到异常 javax.net.ssl.SSLPeerUnverifiedException: peer 未验证。如果客户端证书已过期或者无效,您可能还会获得此例外。

提示

选项 sslClientCertHeaders 可以设置为 true,然后使用包含客户端证书详情的标头增强 Camel 消息。例如,主题名称在标头 CamelNettySSLClientCertSubjectName 中可用。

240.7.4. 使用多个 Codecs

在某些情况下,可能需要将编码器和解码器链添加到 netty 管道中。要将多个 codecs 添加到 camel netty 端点中,应使用 'encoders' 和 'decoders' uri 参数。与 "encoder" 和 'decoder' 参数类似,它们用于提供应添加到管道中的引用(频道UpstreamHandlers 和 ChannelDownstreamHandlers 列表)。请注意,如果指定了 encoders,则将忽略 encoder 参数,类似于解码器和解码器参数。

注意

阅读以上关于使用不可共享编码器/解码器的信息。

需要将 codecs 列表添加到 Camel 的 registry 中,以便在端点创建时解析它们。

Spring 的原生集合支持可用于在应用程序上下文中指定 codec 列表

然后,bean 名称可以在 netty 端点定义中使用,可以是用逗号分开的列表,或者包含在 List 中。

或通过 spring.

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat