π€― High-performance PHP application server, process manager written in Go and powered with plugins
MIT License
Bot releases are visible (Hide)
Published by rustatian almost 2 years ago
roadrunner
v2.12.1
StandWithUkraine
πΊπ¦πΊπ¦πΊπ¦GOMAXPROCS
to match the container CPU quota.Status
to check the AMQP connection PR.prefetch
option now works as expected. RR will not consume new JOBS when it reaches the prefetch
limit, until already accepted messages are not ACK/NACK-ed.prefetch
option now works as expected (see SQS). You can now emulate FIFO in memory by setting the prefetch
option to 1.Thanks to our awesome contributors: @wolfy-j , @butschster , @roxblnfk , @kastahov , @msmakouz, @lyt8384 β€οΈ
Published by rustatian almost 2 years ago
roadrunner
v2.12.0
websocket
and broadcast
plugins were replaced by the new centrifuge
plugin. How to build RR with these deprecated plugins ->
link
sdk
and api
, updated to v3
. There are no breaking changes; we moved all Go code from the api
to sdk
.β New API to get the RR version and configuration in the JSON format -> rpc.Version
, rpc.Config
.
β New API to get the correct number of the running services, including statistics about the processes -> server.Statuses
.
β New option to show the service name in the logs:
# Show the name of the service in logs (e.g. service.some_service_1)
#
# Default: false
service_name_in_log: false
Birddog: link
metrics.Unregister
.jobs:
pipelines:
example:
driver: amqp
config:
# Durable exchange
#
# Default: true
exchange_durable: true
# Auto-deleted exchange
#
# Default: false
exchange_auto_deleted: false
# Auto-deleted queue
#
# Default: false
queue_auto_deleted: false
reset_timeout
:pool:
allocate_timeout: 10s
reset_timeout: 10s
destroy_timeout: 10s
centrifugo
plugin.RoadRunner config:
version: "2.7"
centrifuge:
# Centrifugo server proxy address (docs: https://centrifugal.dev/docs/server/proxy#grpc-proxy)
#
# Optional, default: tcp://127.0.0.1:30000
proxy_address: "tcp://127.0.0.1:30000"
# gRPC server API address (docs: https://centrifugal.dev/docs/server/server_api#grpc-api)
#
# Optional, default: tcp://127.0.0.1:30000. Centrifugo: `grpc_api` should be set to true and `grpc_port` should be the same as in the RR's config.
grpc_api_address: tcp://127.0.0.1:30000
# Use gRPC gzip compressor
#
# Optional, default: false
use_compressor: true
# Your application version
#
# Optional, default: v1.0.0
version: "v1.0.0"
# Your application name
#
# Optional, default: roadrunner
name: "roadrunner"
# TLS configuration
#
# Optional, default: null
tls:
# TLS key
#
# Required
key: /path/to/key.pem
# TLS certificate
#
# Required
cert: /path/to/cert.pem
# Workers pool settings. link: https://github.com/roadrunner-server/roadrunner/blob/master/.rr.yaml#L812
#
# Optional, default: null (see default values)
pool: {}
protoc-gen-php-grpc
plugin errorThanks to our awesome contributors: @wolfy-j, @andrey-tech, @butschster, @masterjus, @phroggyy, @rapita, @egonbraun, @tungfinblox β€οΈ
Published by rustatian almost 2 years ago
v3
. This is done not because of some breaking change but because of the internal update.jobs:
pipelines:
example:
driver: amqp
config:
# Durable exchange
#
# Default: true
exchange_durable: true
# Auto-deleted exchange
#
# Default: false
exchange_auto_deleted: false
# Auto-deleted queue
#
# Default: false
queue_auto_deleted: false
reset_timeout
. Note that the pool.Reset
is protected by mutexes, meaning that if you have some requests already in the pool, you'll have to wait for these requests to be processed. The reset_timeout
does not count this time.pool:
allocate_timeout: 10s
reset_timeout: 10s
destroy_timeout: 10s
Published by rustatian almost 2 years ago
websocket
and broadcast
plugins were replaced by the new centrifuge
plugin.sdk
and api
updated to v3
. There are no breaking changes except we moved all Go code from the api
to sdk
.centrifugo
plugin. This will replace existing broadcast
+ websockets
plugins. FR.RoadRunner config:
version: "2.7"
centrifuge:
# Centrifugo server proxy address (docs: https://centrifugal.dev/docs/server/proxy#grpc-proxy)
#
# Optional, default: tcp://127.0.0.1:30000
proxy_address: "tcp://127.0.0.1:30000"
# gRPC server API address (docs: https://centrifugal.dev/docs/server/server_api#grpc-api)
#
# Optional, default: 127.0.0.1:30000. Centrifugo: `grpc_api` should be set to true and `grpc_port` should be the same as in the RR's config.
grpc_api_address: 127.0.0.1:30000
# Use gRPC gzip compressor
#
# Optional, default: false
use_compressor: true
# Your application version
#
# Optional, default: v1.0.0
version: "v1.0.0"
# Your application name
#
# Optional, default: roadrunner
name: "roadrunner"
# TLS configuration
#
# Optional, default: null
tls:
# TLS key
#
# Required
key: /path/to/key.pem
# TLS certificate
#
# Required
cert: /path/to/cert.pem
# Workers pool settings. link: https://github.com/roadrunner-server/roadrunner/blob/master/.rr.yaml#L812
#
# Optional, default: null (see default values)
pool: {}
protoc-gen-php-grpc
plugin error, BUG (thanks @rapita)Published by rustatian about 2 years ago
worker
+ sync worker
(since there were no differences), pool
+ sync pool
- now, if a user uses supervisor, pool automatically turns on supervisor under the hood.multipart-form
files), BUG, (thanks @egonbraun)v3
. They don't use API interfaces anymore.Published by rustatian about 2 years ago
SearchAttributes
. FR, (thanks @cv65kr).roadrunner-temporal
plugin updated to: 1.7.0
http
plugin updated to: 2.23.5
sqs
plugin updated to: 2.20.4
config
plugin updated to: 2.16.5
grpc
plugin updated to: 2.23.3
nats
plugin updated to: 2.17.3
jobs
plugin updated to: 2.18.4
server
plugin updated to: 2.16.4
tcp
plugin updated to: 2.15.4
websockets
plugin updated to: 2.16.5
otel
plugin updated to: 2.5.6
kafka
plugin updated to: 2.2.3
Published by rustatian about 2 years ago
buf
remote plugins support for the protoc-gen-php-grpc
plugin. FR, (thanks @rauanmayemir)mTLS
support. FR, (thanks @seregazhuk)temporal:
address: 127.0.0.1:7233
cache_size: 100000
activities:
num_workers: 4
tls:
key: client.key
cert: client.pem
root_ca: ca.cert
client_auth_type: require_and_verify_client_cert
server_name: "tls-sample"
yaml
values. BUG, (thanks @lyt8384)base64
decoder for the google's ErrorProto
structure. FR, (thanks @rauanmayemir)Published by rustatian about 2 years ago
β Kafka plugin: [ β οΈ EXPERIMENTAL OPTION β οΈ ] Kafka plugin now waits for 1 minute (automatically) for the broker to be available, FR, (thanks @Baiquette)
β Internal: PHP Worker now uses an FSM to transition between states (working
, ready
, invalid
, etc).
β Internal: ./rr reset
now works in parallel. All workers will be restarted simultaneously instead of a one-by-one sync approach.
β Internal: ./rr reset
and destroy (when stopping RR) now gracefully stop the workers (giving a chance for the finalizers to work). If the worker doesn't respond in 10 seconds, it'll be killed.
AWS IMDSv2
instances, BUG (thanks @paulermo)stream not found
error from NATS, BUG, (thanks @pjtuxe)statsd
daemon for stats aggregation, FR, (thanks @cv65kr)driver
:Prometheus:
temporal:
address: "127.0.0.1:7233"
metrics:
driver: prometheus # <---- prometheus used by default (you may omit the driver in this case)
address: "127.0.0.1:9095"
prefix: "samples"
type: "summary"
activities:
num_workers: 4
Statsd:
temporal:
address: "127.0.0.1:7233"
metrics:
driver: statsd # <---- Should be specified to use a statsd driver
host_port: "127.0.0.1:8125"
prefix: "samples"
flush_interval: 1s
flush_bytes: 512
tags:
- foo: bar
activities:
num_workers: 4
Detailed description is here: link
Published by rustatian about 2 years ago
application/x-www-form-urlencoded
content type. FR1, FR2, (thanks @ekisu, @rlantingmove4mobile)http:
raw_body: true/false (by default)
client-name
and client-version
in Go client to represent PHP-SDK, FR, (thanks, @wolfy-j).rr.yaml
configuration for the cache
plugin. link
Published by rustatian about 2 years ago
2.12.0
we plan to replace websockets
and broadcast
plugins with the centrifuge
plugin. However, if you still need a RR with these deprecated plugins, you may use Velox
to build your custom build.gRPC
errors API. The exception might be passed as a Status
structure in the Metadata
(key - error
) to be parsed and returned to the user w/o worker restart. NOTE: Status
structure should be marshaled via proto
marshaller, not json
. FR
context deadline exceeded
error on worker's allocation. We updated the error message with the link to the docs with the most common causes for the worker allocation failed
error: https://roadrunner.dev/docs/known-issues-allocate-timeout/2.x/en. Feel free to add your cases here :)folder
, which can be used to specify the folder with the plugin in the repository. (thanks, @darkweak)replace
directives. (thanks, @darkweak)Configuration:
temporal:
tls:
key: path/to/key
cert: path/to/cert
# other options
allocate_timeout
from the pool to wait for the tcp/unix
socket connection from the PHP worker. BUG, (thanks @Warxcell)github
option is specified in the configuration.pool.allocate_timeout
for the sockets/tcp relays instead of silently used of relay_timeout
.raw
logger mode. CH, (thanks @ilsenem)GO-SDK
and API
updated to the latest versions.Published by rustatian over 2 years ago
jaeger_agent
exporter - FR, (thanks @L3tum)OTEL
SDK updated to v1.8.0
google.golang.org/grpc
updated to v1.48.0
logger
plugin updated to v2.13.5
Go
updated to v1.18.4
Published by rustatian over 2 years ago
wait4
syscall and become a zombie. BUG
version
, buildtime
, GitHub, and GitLab tokens
in the velox.toml
.CRC verification failed
error. Starting from the v2.10.6
, RR will show user-friendly message with the link to our docs on the most common causes for this type of error. Docs
Published by rustatian over 2 years ago
stderr
buffer size from 32kb to 64kb, man7-pipe_capacity, BUG, (thanks @7krasov)default
routing key. BUG, (thanks @rauanmayemir)x-www-form-urlencoded
requests 10Mb limit. BUG (thanks @StreetYo)Published by rustatian over 2 years ago
reset
behavior for the workers' pool.reset
order for the RR and Temporal workers.Published by rustatian over 2 years ago
Published by rustatian over 2 years ago
βοΈ WORKER: Starting from this release, RR is able to show full error messages sent to the STDOUT
during the worker bootstrap. FR (thanks @ykweb)
βοΈ HTTP: Connection might be upgraded from the http/1.1
to h2c
: rfc7540
Headers, which should be sent to upgrade connection:
Upgrade
: h2c
Connection
: HTTP2-Settings
Connection
: Upgrade
HTTP2-Settings
: AAMAAABkAARAAAAAAAIAAAAA
RFC
βοΈ VELOX: Add GitLab support. Starting from the beta.2
you may use GitHub
and GitLab
plugins together. Configuration updated. Keep in mind, that until the stable release 1.0.0
configuration might be changed with breaking changes.
βοΈ protoc-gen-php-grpc: Use of fully qualified names in place of imports. PR (thanks @ryanjcohen)
Published by rustatian over 2 years ago
Job
structure, it'll create and fill all available fields manually. To turn on this feature, use consume_all: true
in the driver configuration, e.g.:amqp
, sqs
,beanstalk
,nats
.jobs:
num_pollers: 10
pipeline_size: 100000
pool:
num_workers: 10
pipelines:
test-raw:
driver: sqs
config:
consume_all: true # <------- NEW OPTION
consume: [ "test-raw" ]
skip_queue_declaration: true
sqs driver option. FR, (thanks @sergey-telpuk)jobs:
num_pollers: 10
pipeline_size: 100000
pool:
num_workers: 10
pipelines:
test-2:
driver: sqs
config:
skip_queue_declaration: true # <----- NEW OPTION
consume: [ "test-2" ]
Jaeger
exporter and propagator.http:
address: 127.0.0.1:43239
max_request_size: 1024
middleware: [gzip, otel]
pool:
num_workers: 2
max_jobs: 0
allocate_timeout: 60s
destroy_timeout: 60s
otel:
exporter: jaeger # <----- NEW OPTION
mTLS
authentication. Possible values for the client_auth_type
are the same as for the gRPC
(no_client_cert
, request_client_cert
,require_any_client_cert
,verify_client_cert_if_given
,require_and_verify_client_cert
) FR, (thanks @fwolfsjaeger)version: '2.7'
server:
command: "php ../../php_test_files/http/client.php echo pipes"
relay: "pipes"
relay_timeout: "20s"
http:
address: :8085
max_request_size: 1024
middleware: [ ]
pool:
num_workers: 1
max_jobs: 0
allocate_timeout: 60s
destroy_timeout: 60s
ssl:
address: :8895
key: "key"
cert: "cert"
root_ca: "rootCA.pem" # <---- REQUIRED to use mTLS
client_auth_type: require_and_verify_client_cert # <---- NEW OPTION
logs:
mode: development
level: error
rr_auto_ack
attribute won't fail the existing messages.Published by rustatian over 2 years ago
new_relic
http middleware. Please, consider using the new OpenTelemetry middleware: otel
.amd64
releases. FR
v2.10.0
, you can check every released binary with a provided *.asc
key. For example:$ gpg --verify rr.asc
The openPGP key can be verified here: keyserver
Go
programming language located here: link. To use it, just import the latest stable version go.buf.build/protocolbuffers/go/roadrunner-server/api latest
.Service
plugin now supports auto-reload. It can be added to the reload
plugin targets and on change, it'll reload all underlying processes.AutoAck
jobs option. For the messages (jobs), which are acceptable to lose. Or which execution can lead to a worker's stop (for example - OOM). FR, (thanks @hustlahusky)new_relic
middleware is deprecated, it'll receive only dependency updates and will be removed from the RR bundle in the v2.12.0
. (thanks @brettmc)datadog
, new relic
.http
or grpc
clients.Configuration sample (stdout exporter):
http:
address: 127.0.0.1:43239
max_request_size: 1024
middleware: [gzip, otel]
pool:
num_workers: 2
max_jobs: 0
allocate_timeout: 60s
destroy_timeout: 60s
otel:
insecure: false
compress: true
exporter: stdout
service_name: rr_test
service_version: 1.0.0
New Relic exporter via http
client: link
http:
address: 127.0.0.1:43239
max_request_size: 1024
middleware: [gzip, otel]
pool:
num_workers: 2
max_jobs: 0
allocate_timeout: 60s
destroy_timeout: 60s
otel:
insecure: false
compress: true
client: http
exporter: stdout
custom_url: ""
service_name: rr_test
service_version: 1.0.0
endpoint: otlp.eu01.nr-data.net:4318
headers:
- api-key: xxx # your api key here
PHP worker can access tracing data via w3c
headers.
protoc-gen-php-grpc
now supports optional
fields. (thanks @genhoi)Service
plugin output will be automatically trimmed. CHORE, (thanks, @OO00O0O)Published by rustatian over 2 years ago
Published by rustatian over 2 years ago