第 11 章 Atmosphere Websocket 组件

作为 Camel 版本 2.14 可用

atmosphere-websocket: 组件为通过 Websocket 与外部客户端通信的 servlet 提供基于 Websocket 的端点(作为 servlet 接受来自外部客户端的 websocket 连接)。
组件使用 SERVLET 组件,并使用 Atmosphere 库来支持各种 Servlet 容器中的 Websocket 传输(如 Jetty、Tomcat、…​)。

与启动嵌入式 Jetty 服务器的 Websocket 组件不同,该组件使用容器的 servlet 供应商。

Maven 用户需要将以下依赖项添加到其 pom.xml 中:

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-atmosphere-websocket</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

11.1. Atmosphere-Websocket 选项

Atmosphere Websocket 组件支持 9 个选项,它们如下所列。

名称描述默认类型

servletName (consumer)

要使用的默认 servlet 名称。默认名称为 CamelServlet。

CamelServlet

字符串

httpRegistry (consumer)

使用自定义 org.apache.camel.component.servlet.HttpRegistry。

 

HttpRegistry

附加多部分绑定 (使用者)

是否会在 Camel Exchange 上自动绑定多部分/信息数据作为附件。选项附加MultipartBinding=true 和 disableStreamCache=false 无法一起工作。删除 disableStreamCache 以使用 AttachmentMultipartBinding。这将默认关闭,因为这可能需要 servlet 特定配置在使用 Servlet 时启用此功能。

false

布尔值

fileNameExtWhitelist (consumer)

接受上传的文件的接受文件名扩展白名单。多个扩展可以通过逗号分隔,如 txt,xml。

 

字符串

httpBinding (advanced)

使用自定义 HttpBinding 控制 Camel 消息和 HttpClient 之间的映射。

 

HttpBinding

httpConfiguration (advanced)

使用共享 HttpConfiguration 作为基本配置。

 

HttpConfiguration

allowJavaSerialized Object (advanced)

请求使用 context-type=application/x-java-serialized-object 时,是否允许 java serialization。默认情况下关闭。如果您启用此功能,Java 将把传入的数据从请求中反序列化为 Java,这可能会成为潜在的安全风险。

false

布尔值

headerFilterStrategy (filter)

使用自定义 org.apache.camel.spi.HeaderFilterStrategy 过滤来自 Camel 消息的标头。

 

HeaderFilterStrategy

resolveProperty Placeholders (advanced)

启动时,组件是否应自行解析属性占位符。只有 String 类型的属性才能使用属性占位符。

true

布尔值

Atmosphere Websocket 端点使用 URI 语法配置:

atmosphere-websocket:servicePath

使用以下路径和查询参数:

11.1.1. 路径名(1 参数):

名称描述默认类型

servicePath

websocket 端点 所需的 名称

 

字符串

11.1.2. 查询参数(38 参数):

名称描述默认类型

chunked (common)

如果这个选项为 false,则 Servlet 将禁用 HTTP 流并在响应上设置内容长度的标头

true

布尔值

disableStreamCache (common)

确定 Servlet 的原始输入流是否已缓存(Camel 将读取流到文件,流缓存)缓存。默认情况下,Camel 会缓存 Servlet 输入流,以支持多次读取它,以确保 Camel 可以从流检索所有数据。但是,当您需要访问原始流(如直接流传输到文件或其他持久性存储)时,您可以将这个选项设置为 true。DefaultHttpBinding 会将请求输入流复制到流缓存中,如果这个选项为 false,则会将其放入消息正文,以便支持多次读取流。如果使用 Servlet 桥接/代理端点,请考虑启用这个选项来提高性能,如果不需要多次读取消息有效负载。http/http4 producer 默认将缓存响应正文流。如果将此选项设置为 true,则生产者不会缓存响应正文流,而是使用响应流,作为消息正文。

false

布尔值

headerFilterStrategy (common)

使用自定义 HeaderFilterStrategy 过滤来自 Camel 消息的标头。

 

HeaderFilterStrategy

sendToAll (common)

是否发送到所有(广播)还是发送到单个接收器。

false

布尔值

transferException (common)

如果对使用者端启用和交换失败处理,并且如果导致的例外在响应中作为应用程序/x-java-serialized-object 内容类型发送回序列化,则进行后定。在制作者端,异常会按原样进行反序列化和丢弃,而不是 HttpOperationFailedException。导致的异常需要被序列化。默认情况下关闭。如果您启用此功能,Java 将把传入的数据从请求中反序列化为 Java,这可能会成为潜在的安全风险。

false

布尔值

useStreaming (common)

要启用流将数据作为多个文本片段发送。

false

布尔值

httpBinding (common)

使用自定义 HttpBinding 控制 Camel 消息和 HttpClient 之间的映射。

 

HttpBinding

async (consumer)

将消费者配置为以同步模式工作

false

布尔值

bridgeErrorHandler (consumer)

允许将消费者桥接到 Camel 路由 Error Handler,这意味着使用者试图获取传入消息或类似信息时出现任何异常,现在将作为一个消息进行处理,并由路由 Error Handler 处理。默认情况下,使用者将使用 org.apache.camel.spi.Exception 处理程序处理异常,该处理程序将记录在 WARN 或 ERROR 级别,并忽略。

false

布尔值

httpMethodRestrict (consumer)

仅用于允许消耗 HttpMethod 匹配,如 GET/POST/PUT 等。可以使用逗号分隔多个方法。

 

字符串

matchOnUriPrefix (consumer)

如果找不到完全匹配,则使用者是否应该尝试通过匹配 URI 前缀来查找目标使用者。

false

布尔值

responseBufferSize (consumer)

使用 javax.servlet.ServletResponse 的自定义缓冲区大小。

 

整数

servletName (consumer)

要使用的 servlet 的名称

CamelServlet

字符串

attachmentMultipartBinding (consumer)

是否会在 Camel Exchange 上自动绑定多部分/信息数据作为附件。选项附加MultipartBinding=true 和 disableStreamCache=false 无法一起工作。删除 disableStreamCache 以使用 AttachmentMultipartBinding。这将默认关闭,因为这可能需要 servlet 特定配置在使用 Servlet 时启用此功能。

false

布尔值

eagerCheckContentAvailable (consumer)

是否预先检查 HTTP 请求是否有内容(如果 content-length 标头为 0 )是否有内容。这可在问题单中打开 HTTP 客户端不会发送流化数据。

false

布尔值

exceptionHandler (consumer)

要让使用者使用自定义 ExceptionHandler。请注意,如果启用了选项 bridgeErrorHandler,则不使用这个选项。默认情况下,消费者处理异常,这将在 WARN 或 ERROR 级别记录,并忽略。

 

ExceptionHandler

exchangePattern (consumer)

在使用者创建交换时设置交换模式。

 

ExchangePattern

fileNameExtWhitelist (consumer)

接受上传的文件的接受文件名扩展白名单。多个扩展可以通过逗号分隔,如 txt,xml。

 

字符串

optionsEnabled (consumer)

指定是否为这个 Servlet consumer 启用 HTTP OPTIONS。默认情况下,OPTIONS 会被关闭。

false

布尔值

traceEnabled (consumer)

指定是否为这个 Servlet consumer 启用 HTTP TRACE。默认关闭 TRACE。

false

布尔值

bridgeEndpoint (producer)

如果 选项为 true,HttpProducer 将忽略 Exchange.HTTP_URI 标头,并使用端点的 URI 请求。您也可以将选项 throwExceptionOnFailure 设为 false,使 HttpProducer 发送所有故障响应。

false

布尔值

connectionClose (producer)

指定是否需要将 Connection Close 标头添加到 HTTP Request 中。默认情况下 connectionClose 为 false。

false

布尔值

copyHeaders (producer)

如果这个选项为 true,则根据复制策略将 IN Exchange 标头复制到 OUT Exchange 标头。将其设置为 false,仅允许包括 HTTP 响应中的标头(不会传播 IN 标头)。

true

布尔值

httpMethod (producer)

配置要使用的 HTTP 方法。如果设置,HttpMethod 标头无法覆盖这个选项。

 

HttpMethods

ignoreResponseBody (producer)

如果这个选项为 true,则 http producer 不会读取响应正文并缓存输入流

false

布尔值

preserveHostHeader (producer)

如果选项为 true,HttpProducer 会将 Host 标头设置为当前交换主机标头中包含的值,对于您希望下游服务器收到的主机标头,可以使用 Host 标头为代理应用程序生成准确的 URL。

false

布尔值

throwExceptionOnFailure (producer)

禁用丢弃 HttpOperationFailedException 的选项(如果来自远程服务器的响应失败)。这可让您获得所有响应,无论 HTTP 状态代码如何。

true

布尔值

cookieHandler (producer)

配置 Cookie 处理程序以维护 HTTP 会话

 

CookieHandler

okStatusCodeRange (producer)

被视为成功响应的状态代码。值包括:可以定义多个范围,以逗号分隔,例如 200-204,209,301-304。每个范围必须是单个数字,或使用包括横线的短划线。

200-299

字符串

urlRewrite (producer)

弃用了 自定义的 org.apache.camel.component.http.UrlRewrite,它允许您在网桥/proxy 端点时重写 url。更多信息请参阅 http://camel.apache.org/urlrewrite.html

 

UrlRewrite

mapHttpMessageBody (advanced)

如果此选项正确,则交换正文将映射到 HTTP 正文。将其设置为 false 将避免 HTTP 映射。

true

布尔值

mapHttpMessageFormUrl EncodedBody (advanced)

如果这个选项为 true,则交换的 IN Exchange Form Encode 正文将映射到 HTTP。将其设置为 false 可以避免 HTTP Form Encoded body 映射。

true

布尔值

mapHttpMessageHeaders (advanced)

如果此选项为 true,则交换的 IN Exchange Headers 将映射到 HTTP 标头。将其设置为 false 将避免 HTTP 标头映射。

true

布尔值

同步 (高级)

设置同步处理是否应当严格使用,还是允许 Camel 使用异步处理(如果受支持)。

false

布尔值

proxyAuthScheme (proxy)

要使用的代理身份验证方案

 

字符串

proxyHost (proxy)

要使用的代理主机名

 

字符串

proxyPort (proxy)

要使用的代理端口

 

int

authHost (security)

要用于 NTML 的身份验证主机

 

字符串