- vừa được xem lúc

[Symfony4] Giải thích cơ chế hoạt động của worker

0 0 9

Người đăng: Phan Ngoc

Theo Viblo Asia

Phạm vi sử dụng

Symfony là framework gạo cội trong làng PHP, với khá nhiều project xử dụng và custom. Điển hình là ECCUBE (1 ecommerce ở JAPAN). Ở đây mình xin nói về symfony4, mình đã trải nghiệm thử worker và xin phép được mô tả với mọi người cách hoạt động của nó.

Các hoạt động đối với driver redis

try { $messages = $this->connection->xreadgroup( $this->group, $this->consumer, [$this->stream => $messageId], 1 ); } catch (\RedisException $e) { throw new TransportException($e->getMessage(), 0, $e); }

Symfony4 worker dựa trên stream của redis để hoạt động.

Mình xin tóm tắt trong các ý sau:

A Redis stream is a data structure that acts like an append-only log. You can use streams to record and simultaneously syndicate events in real time. Examples of Redis stream use cases include: Event sourcing > > (e.g., tracking user actions, clicks, etc.) Sensor monitoring (e.g., readings from devices in the field)

Có thể thấy rõ qua 1 ảnh stream khá đẹp như sau:

Worker hoạt động dựa trên cơ chế push message vào stream, Producer1 ở đây gửi một đoạn message chứa data, để các worker sau đó sẽ get và xử lí

Các worker pick message thông qua cơ chế consumer group của redis. Ở đây mỗi worker là 1 consumer. Mỗi consumer (consumerA) sẽ pick 1 message từ stream để xử lí, sau khi pick message đó sẽ ở pending list (PEL), nhờ vậy message đó không thể bị pick bởi các consumer khác, sau khi xử lí xong, consumerA sẽ ACK message đó, làm message đó quay trở lại stream ở trạng thái sẵn sàng, nhưng consumerA đồng thời cũng xoá message đó khỏi stream.

Đây là cách thức hoạt động của symfomy messenger dùng redis driver. Hy vọng sẽ giúp các bạn hiểu hơn 😃 . Thanks mọi người đã đọc 😋

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tạo console với Symfony

Giới thiệu. Tương tự như command artisan Laravel trong Symfony chúng ta có thể tạo ra các command để thực hiện các nghiệp vụ mà chúng ta mong muốn, ví dụ như chúng ta cần update nhiều records hay export csv ... mà không cần đến request của client thay vào đó chúng ta sẽ run CLI (commant line). . Upd

0 0 8

- vừa được xem lúc

[Symfony 4] Ẩn một số log không cần thiết với custom handler

Bối cảnh. Symfony phát sinh khá nhiều log như, như process init, begin transaction, ini, .

0 0 10

- vừa được xem lúc

Symfony 4 + ECCUBE , làm thế nào để luân chuyển query giữa các node master slave

Mở đầu. Hắn nhiều người trong chúng ta có biết qua master slave node trong RDS , mặc định các framework PHP nổi tiếng như PHP , Symfony đều có hỗ trợ config master slave endpoint, để việc luân chuyển

0 0 17

- vừa được xem lúc

Một số lỗi thường gặp về perfomance trong dự án ECCUBE + php

1.Lỗi không index làm delete query bị slow. Chức năng login có lưu table lock tạm, để xác định số lần nhập sai. . .

0 0 10

- vừa được xem lúc

Background worker trong .NET

Hi anh em, chúc mọi người một ngày làm việc hiệu quả và đây năng lượng. Hôm nay mình sẽ giới thiệu về background worker trong .NET. 1.

0 0 11

- vừa được xem lúc

Chạy Python Celery Worker trên nền tảng Serverless, nhiều lợi ích bất ngờ!

Mở đầu. Y như tiêu đề bài viết, trong bài viết này mình sẽ hướng dẫn mọi người chạy những dịch vụ dạng background worker trên nền tảng Serverless.

0 0 16