[英]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.