SQL to ReQL cheat sheet; Cookbook; Example projects; Administration. Administration tools; Scaling, sharding and replication; Permissions and user accounts; Failover; Backing up your data; System tables; Current issues; Statistics; Jobs; Version migration; Importing data; Third-party admin tools; Deployment. Start on system startup; Securing. Using EKS and Gitlab CI to deploy applications.
Typical tools: Kafka, RabbitMQ (AMQP), JMS. What the workflow engine does: timeout handling, managing activity chains / the flow, support stateful enterprise integration patterns like aggregator or resequencer, consistency and compensation handling aka Saga pattern as discussed in my talk “Lost in transaction” (recorded e.g. At JavaZone Oslo). Cheat Sheet - Docker. Regardless of whatever dependencies get added RUN groupadd -r rabbitmq && useradd -r-d /var/lib/rabbitmq -m-g rabbitmq rabbitmq # vs. Redis Cheat Sheet Edit Cheat Sheet. When you encounter a Redis instance and you quickly want to learn about the setup you just need a few simple commands to peak into the setup. Of course it doesn’t hurt to look at the official full command documentation, but below.
Общие упрощенные понятия. Возможно существуют способы задать другое поведение нежели данное упощенное.
Понятия
- producer - отправитель, программный код, который отправляет сообщение.
- consumer - получатель, программный код, который должен получить сообшение.
- exchange - обменник, функционал RabbitMQ, получает сообщение с заданными параметрами от отправителя и:
- может сбросить(удалить) сообщение или вернуть отправителю (зависит от атрибутов сообщения),
- может отправить сообщение в очередь,
- может отправить сообщение в несколько очередей (сообщение будет скопировано для каждой очереди)
- queue - очередь, функционал RabbitMQ, хранит все сообщения и раздает их получателям.
- message - сообщение, содержит атрибуты необходимые RabbitMQ, а также данные для передачи от отправителя к получателю
- binding - связывание очереди и обменника. Обменник может отправить сообщения только в те очереди которые с ним связаны.
- routingKey - ключ маршрутизации (может не использоваться), используется обменником для маршрутизации (выбора очереди(ей)) сообщений.
- используется при связывании очереди с обменником
- содержится в атрибуте сообщенияпри совпадении этих ключей сообщение будет отправлено в очередь
Обменник
Default exchange
RabbitMQ всегда создает безымянный обменник типа direct.На этот обменник по умолчанию завязаны все очереди, где routingKey равен имени очереди.Отправка сообщения напрямую в очередь на самом деле это отправка сообщения безымянному обменнику с routingKey нужной очереди.Как итог это выглядит и работает как отправка сообщения напрямую в очередь, но сообщения всегда отправляются через обменник.
Тип обменика (один из четырех вариантов)
- direct - прямая отправка в очередь, используется routingKey. Сообщение с каким-то routingKey будет отправленно обменникомв очередь связанную с этим обменником с тем же routingKey, иначе сброшено(удалено).
- fanout - routingKey игнорируется, сообщения будут отправлены во все очереди связанные с обменником
- topic - похож на direct, сообщения отправляются с routingKey, но очереди связываются с обменником по шаблонной строке, сообщение попадет в те очереди с шаблонами которых совпадает routingKey
- headers - (todo)
Создание обменника
- указать имя обменника
- тип обменника
- перечень аргументов
- durable (bool) - сохранять и восстанавливать после рестарта RabbitMQ
- autoDelete (bool) - удалится после того как все очереди отключатся
- (todo)
Связывание обменника
Необходимо указать:
- имя очереди
- имя обменника
- шаблон или routingKey (зависит от типа обменника)
Очередь
Перед использованием должны быть созданы.Повторное создание с теми же аргументами не создаст ошибки и не создаст еще одну очередь.Повторное создание с другими аргументами создаст ошибку.
Создание очереди
- имя очереди (опционально), RabbitMQ сгенерирует имя при необходимости
- опции
- exclusive - используется только данным подключением, будет удалено после закрытия подключения
- durable - сохранение после рестарта
- autoDelete - удалится если кол-во получетелей станет ноль
- maxPriority - очередь станет поддерживать приоритетные сообщения с приоритетом от 0 до maxPriority, чем выше число тем приоритетнее
- (todo)
Отправитель
Программа не входящая в состав RabbitMQ, отправляет сообщения.
Отправка сообщения (публикация)
- имя обменника
- ключ маршрутизации
- содержимое сообщения
- опции
- expiration - строка в мс, время через которое сообщение будет удалено из очереди
- priority - приоритет, для приоритетных очередей
- persistent - сохранение сообщения при перезагрузки
- mandatory - если true, то сообщение будет возвращено отправителю в случае когда не нашлось очереди для отправки
- (todo)
Получатель
Программа не входящая в состав RabbitMQ, получает сообщения.
Прием сообщения
- имя очереди
- функция
- опции
- noAck - сообщение подверждается при получении автоматически и будет удалено из очереди независимо от как обработано сообщение получателем
- exclusive - эксклюзивное подключение
- priority - приоритет получателя
Сервер вернет consumerTag, необходимый для отмены приема сообщений в будущем.Null вернется для отмененных сообщений.
Ограничение на прием
Количество не подтвержденных сообщений которых может получить получатель.
docker daemon
Enable buildkit
Add to /etc/docker/daemon.json
:
docker-compose
Devices
Labels
Rabbitmq Cheat Sheet Pdf
External Network
Dockerfile
Docker Stop Signal
imagemagick
vim
path update
download & extract tar.gz
gpg dirmgr explained
purge
list what exposed ports do
cassandra
gosu
debian
copy with proper permissions
su-exec
setgid
npm
gosu
tini
node
redis
docker
google cloud sdk
kubectl
pip
Rabbitmq Cheat Sheet
locale
tomcat
https://github.com/Unidata/tomcat-docker/blob/master/Dockerfile
gosu tomcat
Secure repository setup
create application folder structure
Download and clean up in one layer
Package Manager tricks
Metadata
Make sure to add ARG
statements as late as possible to not invalidate the layer cache needlessly.Each ARG
will be prepended to all subsequent RUN
statements, i.e. building an image with the following Dockerfile docker --pull --tag foo:latest --build-arg GIT_COMMIT=46e24af6 --build-arg USERNAME=flask .
Effectively results in the following calls:
Since the git commit hash will typically change with each build the build will not make good use of Docker’s layer cache