第 12 章 tmosphere 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>
12.1. tmosphere-Websocket 选项
Atmosphere Websocket 组件支持 9 个选项,如下所列。
名称 | 描述 | 默认值 | 类型 |
---|---|---|---|
servletName (consumer) | 要使用的默认 servlet 名称。默认名称为 CamelServlet。 | CamelServlet | 字符串 |
httpRegistry (consumer) | 使用自定义 org.apache.camel.component.servlet.HttpRegistry。 | HttpRegistry | |
attachmentMultipart Binding (consumer) | 是否自动将多部分/格式数据绑定为 Camel Exchange 上的附件。选项 attachmentMultipartBinding=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 序列化。默认情况下是关闭的。如果启用此选项,则 Java 会将传入数据从请求反序列化到 Java,这可能会成为潜在的安全风险。 | false | 布尔值 |
headerFilterStrategy (filter) | 使用自定义 org.apache.camel.spi.HeaderFilterStrategy 过滤标头到 Camel 消息。 | HeaderFilterStrategy | |
resolveProperty Placeholders (advanced) | 启动时组件是否应解析自身上的属性占位符。只有属于 String 类型的属性才能使用属性占位符。 | true | 布尔值 |
Atmosphere Websocket 端点使用 URI 语法进行配置:
atmosphere-websocket:servicePath
使用以下路径和查询参数:
12.1.1. 路径参数(1 参数):
名称 | 描述 | 默认值 | 类型 |
---|---|---|---|
servicePath | websocket 端点 所需的 名称 | 字符串 |
12.1.2. 查询参数(38 参数):
名称 | 描述 | 默认值 | 类型 |
---|---|---|---|
chunked (common) | 如果此选项为 false,则 Servlet 将禁用 HTTP 流并在响应中设置 content-length 标头 | 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) | 如果在消费者端启用并且 Exchange 失败,如果导致的 Exception 被发送序列化为 application/x-java-serialized-object 内容类型。在生成者一侧,异常将被反序列化和抛出,而不是 HttpOperationFailedException。导致异常需要被序列化。默认情况下是关闭的。如果启用此选项,则 Java 会将传入数据从请求反序列化到 Java,这可能会成为潜在的安全风险。 | false | 布尔值 |
useStreaming (common) | 启用流将数据作为多个文本片段发送。 | false | 布尔值 |
httpBinding (common) | 使用自定义 HttpBinding 来控制 Camel 消息和 HttpClient 之间的映射。 | HttpBinding | |
async (consumer) | 将消费者配置为在 async 模式中工作 | false | 布尔值 |
bridgeErrorHandler (consumer) | 允许将消费者桥接到 Camel 路由错误处理程序,这意味着当消费者试图选择传入消息或类似信息时发生异常,现在将作为消息处理并由路由 Error Handler 处理。默认情况下,使用者将使用 org.apache.camel.spi.ExceptionHandler 来处理例外情况,该处理程序将被记录在 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 上的附件。选项 attachmentMultipartBinding=true 和 disableStreamCache=false 无法一起工作。删除 disableStreamCache 以使用 AttachmentMultipartBinding。默认情况下关闭此项,因为在使用 Servlet 时,这可能要求 servlet 特定的配置启用此功能。 | false | 布尔值 |
eagerCheckContentAvailable (consumer) | 是否要求检查 HTTP 请求是否有 content-length 标头是否为 0。如果 HTTP 客户端没有发送流数据,则可以打开它。 | false | 布尔值 |
exceptionHandler (consumer) | 要让使用者使用自定义例外处理程序:请注意,如果启用了 bridgeErrorHandler 选项,则此选项不使用。默认情况下,消费者将处理异常,其记录在 WARN 或 ERROR 级别中,并忽略。 | ExceptionHandler | |
exchangePattern (consumer) | 在消费者创建交换时设置交换模式。 | ExchangePattern | |
fileNameExtWhitelist (consumer) | 接受已上传文件的已接受文件名扩展名的白名单。多个扩展可以用逗号分开,如 txt,xml。 | 字符串 | |
optionsEnabled (consumer) | 指定是否为此 Servlet 使用者启用 HTTP OPTIONS。默认情况下关闭 OPTIONS。 | false | 布尔值 |
traceEnabled (consumer) | 指定是否为此 Servlet 使用者启用 HTTP TRACE。默认情况下关闭 TRACE。 | false | 布尔值 |
bridgeEndpoint (producer) | 如果选项为 true,HttpProducer 将忽略 Exchange.HTTP_URI 标头,并使用端点的 URI 请求。您还可以将选项 throwExceptionOnFailure 设置为 false,以让 HttpProducer 发送所有故障响应。 | false | 布尔值 |
connectionClose (producer) | 指定是否需要将 Connection Close 标头添加到 HTTP 请求。默认情况下,connectionClose 为 false。 | false | 布尔值 |
copyHeaders (producer) | 如果此选项为 true,则 IN Exchange 标头将根据复制策略复制到 OUT 交换标头中。把它设置为 false,仅允许包含来自 HTTP 响应的标头(而不是传播 IN 标头)。 | true | 布尔值 |
httpMethod (producer) | 配置要使用的 HTTP 方法。如果设置,HttpMethod 标头无法覆盖这个选项。 | HttpMethods | |
ignoreResponseBody (producer) | 如果此选项为 true,http producer 不会读取响应正文并缓存输入流 | false | 布尔值 |
preserveHostHeader (producer) | 如果选项为 true,HttpProducer 会将 Host 标头设置为当前交换主机标头中包含的值,用于您希望下游服务器接收的主机标头来反映上游客户端调用的 URL,这将允许使用 Host 标头为代理服务生成准确的 URL。 | false | 布尔值 |
throwExceptionOnFailure (producer) | 如果远程服务器失败响应,禁用禁用 HttpOperationFailedException 的选项。这样,无论 HTTP 状态代码是什么,您都可以获得所有响应。 | true | 布尔值 |
cookieHandler (producer) | 配置 Cookie 处理程序来维护 HTTP 会话 | CookieHandler | |
okStatusCodeRange (producer) | 被视为成功响应的状态代码。这些值包含为。可以定义多个范围,用逗号分开,如 200-204,209,301-304。每个范围都必须是一个数字或 from-to,包括横线。 | 200-299 | 字符串 |
urlRewrite (producer) | 弃用 引用一个自定义 org.apache.camel.component.http.UrlRewrite,允许您在桥接/proxy 端点时重写 url。详情请查看 http://camel.apache.org/urlrewrite.html | UrlRewrite | |
mapHttpMessageBody (advanced) | 如果此选项为 true,则交换的 IN Exchange Body 将映射到 HTTP 正文。把它设置为 false 将避免 HTTP 映射。 | true | 布尔值 |
mapHttpMessageFormUrl EncodedBody (advanced) | 如果此选项为 true,则交换的 IN exchange Form Encoded body 将映射到 HTTP。把它设置为 false 将避免 HTTP Form Encoded body 映射。 | true | 布尔值 |
mapHttpMessageHeaders (advanced) | 如果此选项为 true,则交换的 IN Exchange Headers 将映射到 HTTP 标头。把它设置为 false 将避免 HTTP 标头映射。 | true | 布尔值 |
同步 (advanced) | 设置是否应严格使用同步处理,或者 Camel 允许使用异步处理(如果受支持)。 | false | 布尔值 |
proxyAuthScheme (proxy) | 要使用的代理验证方案 | 字符串 | |
proxyHost (proxy) | 要使用的代理主机名 | 字符串 | |
proxyPort (proxy) | 要使用的代理端口 | int | |
authHost (security) | 与 NTML 一起使用的身份验证主机 | 字符串 |