vì mình làm 1 cái manager để notice khi có exception trong hệ thống mà chính cái để gửi exception lại lỗi nên nó thành vòng lặp, mà nếu nó lỗi ở cái manager thì không sao, ở đây nó lại lỗi ở 1 driver trong khi các driver khác vẫn chạy
nó vòng lặp vĩnh viễn vì mỗi lần nó bắn ra 1 lỗi trong queue thì lại có 1 event đc dispatch và nó sinh ra job mới.
try time mình đã đặt rồi.
Cái khó ở đây là mình try catch trong queue để throw ra 1 exception đã được đăng ký trong dontReport để dừng vòng lặp.
Tuy nhiên queue lại được wrap trong runJob trong Queue Woker, và ở đây nó throw những exception khác những cái này mình không thể ném vào dontReport vì như thế sai logic.
Cách tạm thời là Log vào file log của queue và return, chạy đúng mặc dù code hơi ma giáo
@huusu1996 Nguyên nhân đã được tìm ra là return dừng chương trình chứ không phải dừng ở hàm report của handler.
Exception là event nên nếu nó không đc throw thì event không đc kích hoạt, return chỉ trả về object.
Nhưng khó hiểu là tại sao laravel exception handler lại không hoạt động bình thường hay sai chỗ nào không biết, dùng supervisor thì nó trả lại lỗi trong lệnh catch thứ 2 của Queue Woker, FatalThrowableError.
Thằng handle được wrap trong runJob của class này, đang debug, hơi khó hiểu
@Plumpboy should report này đặt ở đâu vậy bạn + cơ chế bắt cái shouldReport này như thế nào vậy. bạn có chắc là cái dispatch event kia là thằng xử lý Exception này ko :-? hay là thằng khác xử lý
@Naem là nó vẫn chạy ra vòng lặp vĩnh viễn, đáng lẽ nó phải hoạt động như này:
chương trình xảy ra lỗi 1, shouldReport = true -> dispatch event -> listener được push vào queue -> lệnh gửi notify 1 hoạt động, lệnh 2 lỗi -> throw ra ChatAppException, shouldReport = false -> không dispatch event -> thread dừng hoạt động.
THẢO LUẬN
cảm ơn a nhé
vì mình làm 1 cái manager để notice khi có exception trong hệ thống mà chính cái để gửi exception lại lỗi nên nó thành vòng lặp, mà nếu nó lỗi ở cái manager thì không sao, ở đây nó lại lỗi ở 1 driver trong khi các driver khác vẫn chạy
nó vòng lặp vĩnh viễn vì mỗi lần nó bắn ra 1 lỗi trong queue thì lại có 1 event đc dispatch và nó sinh ra job mới. try time mình đã đặt rồi.
Cái khó ở đây là mình try catch trong queue để throw ra 1 exception đã được đăng ký trong dontReport để dừng vòng lặp. Tuy nhiên queue lại được wrap trong runJob trong Queue Woker, và ở đây nó throw những exception khác những cái này mình không thể ném vào dontReport vì như thế sai logic.
Cách tạm thời là Log vào file log của queue và return, chạy đúng mặc dù code hơi ma giáo
Bạn cho mình hỏi chút: Authentication/Authorization với traefik thì làm thế nào?
bị lỗi giống bạn
@Plumpboy bạn có public repo hay có thể gửi đoạn xử lý của bạn lên đây ko, mình xem hộ cho, có thể bạn chưa hiểu cách hoạt động của laravel lắm :v
Bài viết rất hay, cảm ơn tác giả ạ.
@Naem https://stackoverflow.com/questions/49796533/is-returning-an-exception-an-anti-pattern đọc để hiểu mình nói gì
@Plumpboy bởi vì bạn throw ra ý, thì handle catch chứ ko phải event của bạn catch, nếu muốn xử lý thì bạn phải xử lý ở trong Handler chứ =))
Hay quá em ơi
@huusu1996 Nguyên nhân đã được tìm ra là return dừng chương trình chứ không phải dừng ở hàm report của handler.
Exception là event nên nếu nó không đc throw thì event không đc kích hoạt, return chỉ trả về object.
Nhưng khó hiểu là tại sao laravel exception handler lại không hoạt động bình thường hay sai chỗ nào không biết, dùng supervisor thì nó trả lại lỗi trong lệnh catch thứ 2 của Queue Woker, FatalThrowableError.
Thằng handle được wrap trong runJob của class này, đang debug, hơi khó hiểu
theo mình là được nhé bạn vì thực tế khi bạn dùng package trên thì nó vẫn tương tự là:
Vì biến
$users
mà bạn thu được vẫn là kết quả thu được trong database mà@Plumpboy should report này đặt ở đâu vậy bạn + cơ chế bắt cái shouldReport này như thế nào vậy. bạn có chắc là cái dispatch event kia là thằng xử lý Exception này ko :-? hay là thằng khác xử lý
@Naem là nó vẫn chạy ra vòng lặp vĩnh viễn, đáng lẽ nó phải hoạt động như này: chương trình xảy ra lỗi 1, shouldReport = true -> dispatch event -> listener được push vào queue -> lệnh gửi notify 1 hoạt động, lệnh 2 lỗi -> throw ra ChatAppException, shouldReport = false -> không dispatch event -> thread dừng hoạt động.
Bạn có thể cho mình xem đoạn try catch trogn code để throw ra exception k
cho mình hỏi nó chạy ko như mong muốn ở đây là nó chạy ntn được ko :v
Bạn ơi cho mình hỏi chỗ nào trả về thông báo username hoặc password không đúng về client vậy
bài viết hay lắm ạ