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

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

0 0 20

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 16

- 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 27

- 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 27

- 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 24

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

So Sánh Laravel và Symfony: Chọn Khung PHP Phù Hợp Cho Dự Án Của Bạn

Trong phát triển PHP, việc chọn khung phù hợp là rất quan trọng để xây dựng các ứng dụng hiệu quả, có thể mở rộng và dễ bảo trì. Laravel và Symfony là hai khung PHP phổ biến nhất, mỗi khung đều có nhữ

0 0 8

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

Tổng hợp tài nguyên PHP mất 5 ngày biên dịch, các bạn like nhé

Đây là một bộ sưu tập tài nguyên PHP mà tôi đã tổng hợp để giúp mọi người dễ dàng tìm thấy những gì họ cần. Tôi sẽ cập nhật danh sách này hàng tuần, vì vậy nếu bạn thấy hữu ích, hãy cho tôi một sao ❤️

0 0 3