簡體   English   中英

在 apache pulsar 中增加 websocket 連接超時

[英]Increase websocket connection timeout in apache pulsar

下面是我在 docker-compose 中將 pulsar 作為獨立版本運行的配置:

pulsar:
    image: apachepulsar/pulsar:2.6.0
    ports:
      - 8080:8080
      - 6650:6650
    environment:
      PULSAR_MEM: " -Xms512m -Xmx512m -XX:MaxDirectMemorySize=1g"    
      PULSAR_PREFIX_webSocketSessionIdleTimeoutMillis: 36000000
    command: bash -c "bin/apply-config-from-env.py conf/standalone.conf && bin/pulsar standalone"

我從瀏覽器客戶端連接脈沖星作為消費者。 我正在使用 JS websocket 進行連接。

客戶端代碼:

new WebSocket(`ws://broker-service-url:8080/ws/v2/consumer/persistent/public/default/my-topic`)

並且socket連接成功。

Docker 容器正在創建中,在 docker 容器中檢查/pulsar/conf/standalone.conf后,我也可以在 Standalone.conf 文件中看到更新的值。

根據互聯網上的發現,我發現我們可以通過添加前綴 PULSAR_PREFIX_ 並運行命令 bash -c "bin/apply-config-from-env.py conf/standalone.conf && bin/pulsar Standalone" 來覆蓋配置。我想增加 websocket 空閑連接的超時時間。默認為 30 秒,我想增加它。

websocket 連接仍會在 30 秒后與客戶端斷開連接,這是默認設置。

我已嘗試使用您的 docker 撰寫文件。 我看到配置文件已更新

root@5aabba6324bc:/pulsar# more conf/standalone.conf | grep webSocketSessionIdleTimeoutMillis
webSocketSessionIdleTimeoutMillis=36000000

它也可以在日志中找到

Attaching to downloads_pulsar_1
pulsar_1  | [conf/standalone.conf] Applying config webSocketSessionIdleTimeoutMillis = 36000000
pulsar_1  | [conf/standalone.conf] Updating config webSocketSessionIdleTimeoutMillis = 36000000
pulsar_1  | [AppClassLoader@18b4aac2] info AspectJ Weaver Version 1.9.2 built on Wednesday Oct 24, 2018 at 15:43:33 GMT
pulsar_1  | [AppClassLoader@18b4aac2] info register classloader sun.misc.Launcher$AppClassLoader@18b4aac2
pulsar_1  | [AppClassLoader@18b4aac2] info using configuration file:/pulsar/lib/org.apache.pulsar-pulsar-zookeeper-utils-2.6.0.jar!/META-INF/aop.xml
pulsar_1  | [AppClassLoader@18b4aac2] info using configuration file:/pulsar/lib/org.apache.pulsar-pulsar-zookeeper-2.6.0.jar!/META-INF/aop.xml
pulsar_1  | [AppClassLoader@18b4aac2] info register aspect org.apache.pulsar.broker.zookeeper.aspectj.ClientCnxnAspect
pulsar_1  | [AppClassLoader@18b4aac2] info register aspect org.apache.pulsar.zookeeper.FinalRequestProcessorAspect

看起來這不是更新配置文件腳本的問題。 但可能是 WebSocket 實現的問題。

您是否嘗試過 2.9.3 或 2.10.1 等新版本? 我不確定問題是否已解決。 如果您還可以在新版本上看到該問題。 最好在此處提出 Github 問題。

看起來服務器端沒有問題。 我嘗試測試是否在我的筆記本電腦上,這是獨立的日志

2022-08-23T12:05:45,037+0800 [pulsar-web-57-12] INFO  org.eclipse.jetty.server.RequestLog - 127.0.0.1 - - [23/Aug/2022:12:05:44 +0800] "GET /ws/v2/consumer/persistent/public/default/my-topic/my-sub HTTP/1.1" 101 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36" 538
2022-08-23T12:05:45,041+0800 [pulsar-web-57-12] INFO  org.apache.pulsar.websocket.AbstractWebSocketHandler - [/127.0.0.1:62398] New WebSocket session on topic persistent://public/default/my-topic
2022-08-23T12:10:45,052+0800 [Connector-Scheduler-76fa3dd8-1] INFO  org.apache.pulsar.websocket.AbstractWebSocketHandler - [/127.0.0.1:62398] WebSocket error on topic persistent://public/default/my-topic : java.util.concurrent.TimeoutException: Idle timeout expired: 300002/300000 ms
2022-08-23T12:10:45,054+0800 [pulsar-io-29-1] INFO  org.apache.pulsar.broker.service.ServerCnx - [/127.0.0.1:62399] Closing consumer: consumerId=0
2022-08-23T12:10:45,055+0800 [pulsar-io-29-1] INFO  org.apache.pulsar.broker.service.AbstractDispatcherSingleActiveConsumer - Removing consumer Consumer{subscription=PersistentSubscription{topic=persistent://public/default/my-topic, name=my-sub}, consumerId=0, consumerName=8092a, address=/127.0.0.1:62399}
2022-08-23T12:10:45,055+0800 [pulsar-io-29-1] INFO  org.apache.pulsar.broker.service.ServerCnx - [/127.0.0.1:62399] Closed consumer, consumerId=0
2022-08-23T12:10:45,055+0800 [pulsar-client-io-87-2] INFO  org.apache.pulsar.client.impl.ConsumerImpl - [persistent://public/default/my-topic] [my-sub] Closed consumer
2022-08-23T12:10:45,057+0800 [Connector-Scheduler-76fa3dd8-1] INFO  org.apache.pulsar.websocket.AbstractWebSocketHandler - [/127.0.0.1:62398] Closed WebSocket session on topic persistent://public/default/my-topic. status: 1001 - reason: java.util.concurrent.TimeoutException: Idle timeout expired: 300002/300000 ms

session 按預期關閉(默認為 5 分鍾)而不是 30 秒但我沒有使用 JS WebSocket 客戶端。

看起來應該是 JS WebSocket 客戶端的問題。

順便說一句,您提供的 URL ws://broker-service-url:8080/ws/v2/consumer/persistent/public/default/my-topic不正確,它錯過了訂閱名稱。

更改為ws://url:8080/ws/v2/consumer/persistent/public/default/my-topic/my-sub后,我可以連接到獨立設備。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM