apache/pulsar-client-node

Retryable Exception

tomasantunes opened this issue · 3 comments

I'm getting the following error when trying to create a producer with Pulsar Node JS client:

node:internal/process/promises:288
            triggerUncaughtException(err, true /* fromPromise */);
            ^

[Error: Failed to create producer: Retryable]
shibd commented

Can you share your reproduction code?

I face the same issue when deploying with 3.1.x docker-compose. If I docker-compose up the default compose from the site on my host and connect to it with pulsar://127.0.0.1:6650 it works as expected. However, if I add my producer service into docker-compose file along with simple redis as:

  worker:
    restart: unless-stopped
    networks:
      - pulsar
    command: node src/worker.js
    environment:
      REDIS_URL: redis://redis:6379
      PULSAR_URL: pulsar://broker:6650
    build:
      context: .
    deploy:
      replicas: 3
    depends_on:
      zookeeper:
        condition: service_healthy
      redis:
        condition: service_healthy
      bookie:
        condition: service_started
  redis:
    image: redis:7
    networks:
      - pulsar
    volumes:
      - ./redis-data:/data
    command: redis-server --io-threads 4 --io-threads-do-reads yes --appendonly no --maxmemory-policy noeviction --bind 0.0.0.0 --maxclients 100000 --tcp-backlog 100000
    healthcheck:
      test: [ "CMD", "redis-cli", "--raw", "incr", "ping" ]
      interval: 3s
      timeout: 5s
      retries: 5

I got this error [Error: Failed to create producer: Retryable]

I verified that broker is pingable from worker container, tried different combinations of networks and other stuff, still can't figure out what could be the issue

Producer code is also default, if simplified:

const URL = process.env.PULSAR_URL || 'pulsar://127.0.0.1:6650';
export const client = new PulsarClient.Client({serviceUrl: URL});
await client.createProducer({topic: 'my-topic',sendTimeoutMs: 1000}).catch(console.error);

UPD Fixed it by changing env variable for broker service from - advertisedListeners=external:pulsar://127.0.0.1:6650 to - advertisedListeners=external:pulsar://broker:6650