github roadrunner-server/roadrunner v2.5.0

latest releases: v2024.1.1, v2024.1.0, v2023.3.12...
2 years ago

💔 Breaking change:

  • 🔨 Some drivers now use a new config key to handle local configuration. Involved plugins and drivers:
  • plugins: broadcast, kv
  • drivers: memory, redis, memcached, boltdb.

Old style:

broadcast:
    default:
        driver: memory
        interval: 1

New style:

broadcast:
  default:
    driver: memory
     config: {} <--------------- NEW
kv:
  memory-rr:
    driver: memory
    config: <--------------- NEW
      interval: 1

kv:
  memcached-rr:
    driver: memcached
    config: <--------------- NEW
       addr:
         - "127.0.0.1:11211"

broadcast:
  default:
    driver: redis
    config: <------------------ NEW
      addrs:
        - "127.0.0.1:6379"

👀 New:

  • ✏️ [BETA] GRPC plugin update to v2.
  • ✏️ Roadrunner-plugins repository. This is the new home for the roadrunner plugins with documentation, configuration samples, and common problems.
  • ✏️ [BETA] Let's Encrypt support. RR now can obtain an SSL certificate/PK for your domain automatically. Here is the new configuration:
    ssl:
      # Host and port to listen on (eg.: `127.0.0.1:443`).
      #
      # Default: ":443"
      address: "127.0.0.1:443"

      # Use ACME certificates provider (Let's encrypt)
      acme:
        # Directory to use as a certificate/pk, account info storage
        #
        # Optional. Default: rr_cache
        certs_dir: rr_le_certs

        # User email
        #
        # Used to create LE account. Mandatory. Error on empty.
        email: you-email-here@email

        # Alternate port for the http challenge. Challenge traffic should be redirected to this port if overridden.
        #
        # Optional. Default: 80
        alt_http_port: 80,


        # Alternate port for the tls-alpn-01 challenge. Challenge traffic should be redirected to this port if overridden.
        #
        # Optional. Default: 443.
        alt_tlsalpn_port: 443,

        # Challenge types
        #
        # Optional. Default: http-01. Possible values: http-01, tlsalpn-01
        challenge_type: http-01

        # Use production or staging endpoints. NOTE, try to use the staging endpoint (`use_production_endpoint`: `false`) to make sure, that everything works correctly.
        #
        # Optional, but for production should be set to true. Default: false
        use_production_endpoint: true

        # List of your domains to obtain certificates
        #
        # Mandatory. Error on empty.
        domains: [
            "your-cool-domain.here",
            "your-second-domain.here"
        ]
  • ✏️ Add a new option to the logs plugin to configure the line ending. By default, used \n.

New option:

# Logs plugin settings
logs:
    (....)
    # Line ending
    #
    # Default: "\n".
    line_ending: "\n"
http:
  address: 127.0.0.1:55555
  max_request_size: 1024
  access_logs: true <-------- Access Logs ON/OFF
  middleware: []

  pool:
    num_workers: 2
    max_jobs: 0
    allocate_timeout: 60s
    destroy_timeout: 60s
  • ✏️ HTTP middleware to handle X-Sendfile header.
    Middleware reads the file in 10MB chunks. So, for example for the 5Gb file, only 10MB of RSS will be used. If the file size is smaller than 10MB, the middleware fits the buffer to the file size.
http:
  address: 127.0.0.1:44444
  max_request_size: 1024
  middleware: ["sendfile"] <----- NEW MIDDLEWARE

  pool:
    num_workers: 2
    max_jobs: 0
    allocate_timeout: 60s
    destroy_timeout: 60s
  • ✏️ Service plugin now supports env variables passing to the script/executable/binary/any like in the server plugin:
service:
  some_service_1:
    command: "php test_files/loop_env.php"
    process_num: 1
    exec_timeout: 5s # s,m,h (seconds, minutes, hours)
    remain_after_exit: true
    env:  <----------------- NEW
      foo: "BAR"
    restart_sec: 1
  • ✏️ Server plugin can accept scripts (sh, bash, etc) in it's command configuration key:
server:
    command: "./script.sh OR sh script.sh" <--- UPDATED
    relay: "pipes"
    relay_timeout: "20s"

The script should start a worker as the last command. For the pipes, scripts should not contain programs, which can close stdin, stdout or stderr.

  • ✏️ Nats jobs driver support - PR.
nats:
  addr: "demo.nats.io"

jobs:
  num_pollers: 10
  pipeline_size: 100000
  pool:
    num_workers: 10
    max_jobs: 0
    allocate_timeout: 60s
    destroy_timeout: 60s

  pipelines:
    test-1:
      driver: nats
      prefetch: 100
      subject: "default"
      stream: "foo"
      deliver_new: "true"
      rate_limit: 100
      delete_stream_on_stop: false
      delete_after_ack: false
      priority: 2

  consume: [ "test-1" ]
  • Driver uses NATS JetStream API and is not compatible with non-js API.

  • ✏️ Response API for the NATS, RabbitMQ, SQS and Beanstalk drivers. This means, that you'll be able to respond to a specified in the response queue.
    Limitations:

    • To send a response to the queue maintained by the RR, you should send it as a Job type. There are no limitations for the responses into the other queues (tubes, subjects).
    • Driver uses the same endpoint (address) to send the response as specified in the configuration.

🩹 Fixes:

  • 🐛 Fix: local and global configuration parsing.
  • 🐛 Fix: boltdb-jobs connection left open after RPC close command.
  • 🐛 Fix: close beanstalk connection and release associated resources after pipeline stopped.
  • 🐛 Fix: grpc plugin fails to handle requests after calling reset.
  • 🐛 Fix: superfluous response.WriteHeader call when connection is broken.

📦 Packages:

  • 📦 roadrunner v2.5.0
  • 📦 roadrunner-plugins v2.5.0
  • 📦 roadrunner-temporal v1.0.10
  • 📦 endure v1.0.6
  • 📦 goridge v3.2.3

Don't miss a new roadrunner release

NewReleases is sending notifications on new releases.