From 47ffada3a95725d521c2db67798b3d8ef7ce1fe1 Mon Sep 17 00:00:00 2001 From: ChenYi <296215406@outlook.com> Date: Thu, 6 Nov 2025 17:27:05 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3Pulsar=E9=83=A8=E7=BD=B2?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=E4=BD=BF=E7=94=A8=E5=85=AC=E7=BD=91=E6=B5=81?= =?UTF-8?q?=E9=87=8F=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DockerComposeShells/.env | 1 + DockerComposeShells/docker-compose-init.yml | 33 ++++++++++++------- .../docker-compose-iotdb-standalone.yml | 2 +- DockerComposeShells/docker-compose.yml | 27 ++++++++++----- DockerComposeShells/start-pulsar.sh | 12 +++---- .../configs/appsettings.Development.json | 22 ++++++------- 6 files changed, 60 insertions(+), 37 deletions(-) diff --git a/DockerComposeShells/.env b/DockerComposeShells/.env index 4345b27..36c8e8b 100644 --- a/DockerComposeShells/.env +++ b/DockerComposeShells/.env @@ -5,6 +5,7 @@ SERVER_IP=192.168.111.174 PULSAR_BROKER_PORT=9093 PULSAR_ADMIN_PORT=9094 PULSAR_ZOOKEEPER_PORT=2181 +PULSAR_BROKER_EXTERNAL_PORT=26974 # IoTDB配置 IOTDB_PORT=30710 diff --git a/DockerComposeShells/docker-compose-init.yml b/DockerComposeShells/docker-compose-init.yml index 1faed76..d5831ab 100644 --- a/DockerComposeShells/docker-compose-init.yml +++ b/DockerComposeShells/docker-compose-init.yml @@ -1,6 +1,6 @@ services: zookeeper: - image: registry.cn-qingdao.aliyuncs.com/jisheyun/pulsar:4.0.6 + image: registry.cn-qingdao.aliyuncs.com/jisheyun/pulsar:4.1.1 container_name: zookeeper hostname: zookeeper restart: unless-stopped @@ -29,7 +29,7 @@ services: start_period: 60s pulsar-cluster-init: - image: registry.cn-qingdao.aliyuncs.com/jisheyun/pulsar:4.0.6 + image: registry.cn-qingdao.aliyuncs.com/jisheyun/pulsar:4.1.1 container_name: pulsar-cluster-init hostname: pulsar-cluster-init command: > @@ -42,7 +42,7 @@ services: - pulsar-net bookie: - image: registry.cn-qingdao.aliyuncs.com/jisheyun/pulsar:4.0.6 + image: registry.cn-qingdao.aliyuncs.com/jisheyun/pulsar:4.1.1 container_name: pulsar-bookie hostname: pulsar-bookie restart: unless-stopped @@ -60,6 +60,8 @@ services: - PULSAR_MEM=-Xms1g -Xmx1g -XX:MaxDirectMemorySize=1g - BOOKIE_MEM=-Xms1g -Xmx1g -XX:MaxDirectMemorySize=1g - PULSAR_PREFIX_zkServers=zookeeper:${PULSAR_ZOOKEEPER_PORT} + # Bookie 使用容器名作为 advertisedAddress,确保 broker 通过内网连接 + - PULSAR_PREFIX_advertisedAddress=pulsar-bookie depends_on: zookeeper: condition: service_healthy @@ -71,7 +73,7 @@ services: - pulsar-bookkeeper-data:/pulsar/data/bookkeeper broker: - image: registry.cn-qingdao.aliyuncs.com/jisheyun/pulsar:4.0.6 + image: registry.cn-qingdao.aliyuncs.com/jisheyun/pulsar:4.1.1 container_name: pulsar-broker hostname: pulsar-broker restart: unless-stopped @@ -89,9 +91,17 @@ services: - PULSAR_PREFIX_zookeeperServers=zookeeper:${PULSAR_ZOOKEEPER_PORT} - PULSAR_PREFIX_configurationStoreServers=zookeeper:${PULSAR_ZOOKEEPER_PORT} - PULSAR_PREFIX_bookkeeperClientPort=3181 - - PULSAR_PREFIX_brokerServicePort=${PULSAR_BROKER_PORT} - PULSAR_PREFIX_webServicePort=${PULSAR_ADMIN_PORT} - - PULSAR_PREFIX_advertisedAddress=${SERVER_IP} + # Web 管理接口对外通告与绑定 + - PULSAR_PREFIX_webServiceBindAddress=0.0.0.0 + - PULSAR_PREFIX_webServiceAdvertisedAddress=${SERVER_IP} + # 多监听器配置:internal=容器内网(9093),external=公网(单独端口) + # bindAddresses: 为不同监听器绑定不同端口,便于根据端口识别 listenerName + - PULSAR_PREFIX_bindAddresses=internal:pulsar://0.0.0.0:${PULSAR_BROKER_PORT},external:pulsar://0.0.0.0:${PULSAR_BROKER_EXTERNAL_PORT} + # advertisedListeners: internal 通告容器名与内网端口;external 通告公网 IP 与外网端口 + - PULSAR_PREFIX_advertisedListeners=internal:pulsar://pulsar-broker:${PULSAR_BROKER_PORT},external:pulsar://${SERVER_IP}:${PULSAR_BROKER_EXTERNAL_PORT} + # internalListenerName: 指定内部通信使用的监听器名称 + - PULSAR_PREFIX_internalListenerName=internal - PULSAR_PREFIX_managedLedgerDefaultEnsembleSize=1 - PULSAR_PREFIX_managedLedgerDefaultWriteQuorum=1 - PULSAR_PREFIX_managedLedgerDefaultAckQuorum=1 @@ -114,6 +124,7 @@ services: - PULSAR_PREFIX_nonPersistentTopicsEnabled=true ports: - "${PULSAR_BROKER_PORT}:${PULSAR_BROKER_PORT}" + - "${PULSAR_BROKER_EXTERNAL_PORT}:${PULSAR_BROKER_EXTERNAL_PORT}" - "${PULSAR_ADMIN_PORT}:${PULSAR_ADMIN_PORT}" depends_on: zookeeper: @@ -135,7 +146,7 @@ services: start_period: 60s pulsar-init: - image: registry.cn-qingdao.aliyuncs.com/jisheyun/pulsar:4.0.6 + image: registry.cn-qingdao.aliyuncs.com/jisheyun/pulsar:4.1.1 container_name: pulsar-init hostname: pulsar-init command: > @@ -169,7 +180,7 @@ services: - pulsar-net iotdb-standalone-service: - image: registry.cn-qingdao.aliyuncs.com/jisheyun/iotdb:2.0.4-standalone + image: registry.cn-qingdao.aliyuncs.com/jisheyun/iotdb:2.0.5-standalone hostname: iotdb-standalone container_name: iotdb-standalone restart: always @@ -253,7 +264,7 @@ services: - pulsar-net admin-api-service: - image: registry.cn-qingdao.aliyuncs.com/jisheyun/jishe.iot.admin:2025.0918.1348 + image: registry.cn-qingdao.aliyuncs.com/jisheyun/jishe.iot.admin:2025.1103.1615 container_name: admin-api hostname: admin-api restart: always @@ -284,7 +295,7 @@ services: - pulsar-net admin-web-service: - image: registry.cn-qingdao.aliyuncs.com/jisheyun/jishe.iot.ui:2025.0918.1348 + image: registry.cn-qingdao.aliyuncs.com/jisheyun/jishe.iot.ui:2025.1030.0949 container_name: admin-web hostname: admin-web restart: always @@ -330,4 +341,4 @@ volumes: driver_opts: type: none o: bind - device: ./pulsar/pulsar-data + device: ./pulsar/pulsar-data \ No newline at end of file diff --git a/DockerComposeShells/docker-compose-iotdb-standalone.yml b/DockerComposeShells/docker-compose-iotdb-standalone.yml index ab628c6..d05cae4 100644 --- a/DockerComposeShells/docker-compose-iotdb-standalone.yml +++ b/DockerComposeShells/docker-compose-iotdb-standalone.yml @@ -1,6 +1,6 @@ services: iotdb-standalone: - image: registry.cn-qingdao.aliyuncs.com/jisheyun/iotdb:2.0.4-standalone + image: registry.cn-qingdao.aliyuncs.com/jisheyun/iotdb:2.0.5-standalone hostname: iotdb-standalone container_name: iotdb-standalone restart: "no" diff --git a/DockerComposeShells/docker-compose.yml b/DockerComposeShells/docker-compose.yml index aa0d51b..4672929 100644 --- a/DockerComposeShells/docker-compose.yml +++ b/DockerComposeShells/docker-compose.yml @@ -1,6 +1,6 @@ services: zookeeper: - image: registry.cn-qingdao.aliyuncs.com/jisheyun/pulsar:4.0.6 + image: registry.cn-qingdao.aliyuncs.com/jisheyun/pulsar:4.1.1 container_name: zookeeper hostname: zookeeper restart: unless-stopped @@ -29,7 +29,7 @@ services: start_period: 60s bookie: - image: registry.cn-qingdao.aliyuncs.com/jisheyun/pulsar:4.0.6 + image: registry.cn-qingdao.aliyuncs.com/jisheyun/pulsar:4.1.1 container_name: pulsar-bookie hostname: pulsar-bookie restart: unless-stopped @@ -46,6 +46,8 @@ services: - PULSAR_MEM=-Xms1g -Xmx1g -XX:MaxDirectMemorySize=1g - BOOKIE_MEM=-Xms1g -Xmx1g -XX:MaxDirectMemorySize=1g - PULSAR_PREFIX_zkServers=zookeeper:${PULSAR_ZOOKEEPER_PORT} + # Bookie 使用容器名作为 advertisedAddress,确保 broker 通过内网连接 + - PULSAR_PREFIX_advertisedAddress=pulsar-bookie depends_on: zookeeper: condition: service_healthy @@ -61,7 +63,7 @@ services: start_period: 60s broker: - image: registry.cn-qingdao.aliyuncs.com/jisheyun/pulsar:4.0.6 + image: registry.cn-qingdao.aliyuncs.com/jisheyun/pulsar:4.1.1 container_name: pulsar-broker hostname: pulsar-broker restart: unless-stopped @@ -79,9 +81,17 @@ services: - PULSAR_PREFIX_zookeeperServers=zookeeper:${PULSAR_ZOOKEEPER_PORT} - PULSAR_PREFIX_configurationStoreServers=zookeeper:${PULSAR_ZOOKEEPER_PORT} - PULSAR_PREFIX_bookkeeperClientPort=3181 - - PULSAR_PREFIX_brokerServicePort=${PULSAR_BROKER_PORT} - PULSAR_PREFIX_webServicePort=${PULSAR_ADMIN_PORT} - - PULSAR_PREFIX_advertisedAddress=${SERVER_IP} + # Web 管理接口对外通告与绑定 + - PULSAR_PREFIX_webServiceBindAddress=0.0.0.0 + - PULSAR_PREFIX_webServiceAdvertisedAddress=${SERVER_IP} + # 多监听器配置:internal=容器内网(9093),external=公网(单独端口) + # bindAddresses: 为不同监听器绑定不同端口,便于根据端口识别 listenerName + - PULSAR_PREFIX_bindAddresses=internal:pulsar://0.0.0.0:${PULSAR_BROKER_PORT},external:pulsar://0.0.0.0:${PULSAR_BROKER_EXTERNAL_PORT} + # advertisedListeners: internal 通告容器名与内网端口;external 通告公网 IP 与外网端口 + - PULSAR_PREFIX_advertisedListeners=internal:pulsar://pulsar-broker:${PULSAR_BROKER_PORT},external:pulsar://${SERVER_IP}:${PULSAR_BROKER_EXTERNAL_PORT} + # internalListenerName: 指定内部通信使用的监听器名称 + - PULSAR_PREFIX_internalListenerName=internal - PULSAR_PREFIX_managedLedgerDefaultEnsembleSize=1 - PULSAR_PREFIX_managedLedgerDefaultWriteQuorum=1 - PULSAR_PREFIX_managedLedgerDefaultAckQuorum=1 @@ -104,6 +114,7 @@ services: - PULSAR_PREFIX_nonPersistentTopicsEnabled=true ports: - "${PULSAR_BROKER_PORT}:${PULSAR_BROKER_PORT}" + - "${PULSAR_BROKER_EXTERNAL_PORT}:${PULSAR_BROKER_EXTERNAL_PORT}" - "${PULSAR_ADMIN_PORT}:${PULSAR_ADMIN_PORT}" depends_on: zookeeper: @@ -123,7 +134,7 @@ services: start_period: 60s iotdb-standalone-service: - image: registry.cn-qingdao.aliyuncs.com/jisheyun/iotdb:2.0.4-standalone + image: registry.cn-qingdao.aliyuncs.com/jisheyun/iotdb:2.0.5-standalone hostname: iotdb-standalone container_name: iotdb-standalone restart: always @@ -205,7 +216,7 @@ services: - pulsar-net admin-api-service: - image: registry.cn-qingdao.aliyuncs.com/jisheyun/jishe.iot.admin:2025.0918.1348 + image: registry.cn-qingdao.aliyuncs.com/jisheyun/jishe.iot.admin:2025.1103.1615 container_name: admin-api hostname: admin-api restart: always @@ -235,7 +246,7 @@ services: - pulsar-net admin-web-service: - image: registry.cn-qingdao.aliyuncs.com/jisheyun/jishe.iot.ui:2025.0918.1348 + image: registry.cn-qingdao.aliyuncs.com/jisheyun/jishe.iot.ui:2025.1030.0949 container_name: admin-web hostname: admin-web restart: always diff --git a/DockerComposeShells/start-pulsar.sh b/DockerComposeShells/start-pulsar.sh index c6bf84f..b96ba4b 100644 --- a/DockerComposeShells/start-pulsar.sh +++ b/DockerComposeShells/start-pulsar.sh @@ -174,13 +174,13 @@ echo "" echo "🎉 Pulsar 基本认证集群启动完成!" echo "" echo "📋 连接信息:" -echo " Pulsar Broker: ${SERVER_IP}:$PULSAR_BROKER_PORT}" -echo " Pulsar Admin: http://${SERVER_IP}:$PULSAR_ADMIN_PORT}" +echo " Pulsar Broker: ${SERVER_IP}:${PULSAR_BROKER_PORT}" +echo " Pulsar Admin: http://${SERVER_IP}:${PULSAR_ADMIN_PORT}" echo " IoTDB: ${SERVER_IP}:${IOTDB_PORT} (root/${IOTDB_ROOT_PASSWORD})" echo " Redis: ${SERVER_IP}:6379" -echo " MySQL: ${SERVER_IP}:$MYSQL_PORT}" -echo " Admin API: http://${SERVER_IP}:$ADMIN_API_PORT}" -echo " Admin UI: http://${SERVER_IP}:$ADMIN_WEB_PORT}" +echo " MySQL: ${SERVER_IP}:${MYSQL_PORT}" +echo " Admin API: http://${SERVER_IP}:${ADMIN_API_PORT}" +echo " Admin UI: http://${SERVER_IP}:${ADMIN_WEB_PORT}" echo " 用户名: ${PULSAR_ADMIN_USER}" echo " 密码: ${PULSAR_ADMIN_PASSWORD}" echo "" @@ -190,7 +190,7 @@ echo " 查看日志: docker compose logs -f" echo " 停止服务: docker compose down" echo "" echo "🧪 测试连接:" -echo " Pulsar: curl -u $PULSAR_ADMIN_USER}:$PULSAR_ADMIN_PASSWORD} http://$SERVER_IP}:$PULSAR_ADMIN_PORT}/admin/v2/clusters" +echo " Pulsar: curl -u ${PULSAR_ADMIN_USER}:${PULSAR_ADMIN_PASSWORD} http://${SERVER_IP}:${PULSAR_ADMIN_PORT}/admin/v2/clusters" echo " Redis: redis-cli -h ${SERVER_IP} -p 6379 ping" echo " MySQL: mysql -h ${SERVER_IP} -P ${MYSQL_PORT} -uroot -p${MYSQL_ROOT_PASSWORD} -e 'SELECT 1'" echo " IoTDB: docker exec -it iotdb-standalone ./start-cli.sh -h iotdb-standalone -u root -p Lixiao@1980" diff --git a/host/JiShe.IoT.HttpApi.Host/configs/appsettings.Development.json b/host/JiShe.IoT.HttpApi.Host/configs/appsettings.Development.json index 39b4033..80c0be0 100644 --- a/host/JiShe.IoT.HttpApi.Host/configs/appsettings.Development.json +++ b/host/JiShe.IoT.HttpApi.Host/configs/appsettings.Development.json @@ -4,19 +4,19 @@ "CorsOrigins": "https://*.IoT.com,http://localhost:4200,http://localhost:3100,http://localhost:80,http://10.10.90.3:4200" }, "ConnectionStrings": { - "Default": "Data Source=192.168.111.174;Port=13306;Database=JiSheIoTProDB2;uid=root;pwd=JiShe!aqG#5kGgh&0;charset=utf8mb4;Allow User Variables=true;AllowLoadLocalInfile=true;TreatTinyAsBoolean=false;SslMode=None;Pooling=true;" + "Default": "Data Source=47.110.53.196;Port=13306;Database=JiSheIoTProDB;uid=root;pwd=JiShe!aqG#5kGgh&0;charset=utf8mb4;Allow User Variables=true;AllowLoadLocalInfile=true;TreatTinyAsBoolean=false;SslMode=None;Pooling=true;" }, "Hangfire": { "Redis": { - "Host": "192.168.111.174:30712,password=1q3J@BGf!yhTaD46nS#", + "Host": "47.110.53.196:30712,password=1q3J@BGf!yhTaD46nS#", "DB": "2" } }, "Redis": { - "Configuration": "192.168.111.174:30712,password=1q3J@BGf!yhTaD46nS#,defaultdatabase=5" + "Configuration": "47.110.53.196:30712,password=1q3J@BGf!yhTaD46nS#,defaultdatabase=5" }, "Kafka": { - "BootstrapServers": "47.110.62.104:9094,192.168.111.174:9094,47.110.60.222:9094", + "BootstrapServers": "47.110.62.104:9094,47.110.53.196:9094,47.110.60.222:9094", "EnableFilter": true, "EnableAuthorization": false, "SaslUserName": "lixiao", @@ -26,8 +26,8 @@ "TaskThreadCount": -1 }, "Pulsar": { - "ServiceUrl": "pulsar://192.168.111.174:9093", - "WebUrl": "http://192.168.111.174:9094", + "ServiceUrl": "pulsar://47.110.53.196:9093", + "WebUrl": "http://47.110.53.196:9094", "UserName": "admin", "TenantName": "1YMVZZkAkRArjxSD8457", "Namespace": "OneNET", @@ -56,10 +56,10 @@ "IoTDBOptions": { "UserName": "root", "Password": "Lixiao@1980", - //"TreeModelClusterList": [ "192.168.111.174:6667", "47.110.60.222:6667", "47.110.62.104:6667" ], - //"TableModelClusterList": [ "192.168.111.174:6667", "47.110.60.222:6667", "47.110.62.104:6667" ], - "TreeModelClusterList": [ "192.168.111.174:30710" ], - "TableModelClusterList": [ "192.168.111.174:30710" ], + //"TreeModelClusterList": [ "47.110.53.196:6667", "47.110.60.222:6667", "47.110.62.104:6667" ], + //"TableModelClusterList": [ "47.110.53.196:6667", "47.110.60.222:6667", "47.110.62.104:6667" ], + "TreeModelClusterList": [ "47.110.53.196:30710" ], + "TableModelClusterList": [ "47.110.53.196:30710" ], "PoolSize": 32, "DataBaseName": "jisheiotdata", "OpenDebugMode": false, @@ -95,7 +95,7 @@ } }, "FreeRedisOptions": { - "ConnectionString": "192.168.111.174:30712,password=1q3J@BGf!yhTaD46nS#,abortConnect=false,connectTimeout=30000,allowAdmin=true,maxPoolSize=500,defaultdatabase=14", + "ConnectionString": "47.110.53.196:30712,password=1q3J@BGf!yhTaD46nS#,abortConnect=false,connectTimeout=30000,allowAdmin=true,maxPoolSize=500,defaultdatabase=14", "UseDistributedCache": true }, "FreeSqlProviderOptions": {