잘 하셨습니다.
최근(5.4) 라라벨 파운데이션 코드를 많이 들여다보진 못했는데, 기억을 더듬어보면...
라라벨이 큐에 데이터를 넣을 때 직렬화(Serialize)를 하는데, 엘로퀀트 모델인 경우에는 모델의 ID만 넣고, 큐를 처리할 때 데이터를 역직렬화하고, 역직렬화된 ID로 모델을 재생했던 것으로 기억합니다.
해서 유성님의 코드에서 Order 모델은 메모리에서만 존재하는 상태로 아직 ID가 부여되지 않았으므로, 큐가 작동하지 않았던 것 같습니다.
혹시 다시 테스트하게된다면 $order→save(); 를 해 준후, event(new \App\Events\Mail($order→fresh())); 로 해 보시고 성공 여부를 여기에 다시 공유해주시면 좋겠네요.
$order→save()를 하게 되면 DB에 저장하게 되어서 작동되는 것을 확인하였습니다.
그런데 이번 프로젝트는 개인정보를
자회사에 보관하지 않는 것을 원칙으로 하기 때문에,
디비를 쓰면안되어서 어쩔수 없이 다시 배열로 돌려놓았네요 ㅠ..ㅠ
자문자답입니다.
그냥 이벤트로 할 경우 생성자에서
fn_name(Order $order) 이렇게 했을 경우 문제가 없지만,
큐의 경우는 id를 찾지 못해서 에러가 나네요..
그래서 건네주고 받는 것을 모두 배열로 바꿔서 그냥
fn_name($order) 식으로 했더니 처리 되었습니다.
안녕하세요.
이벤트 + 큐 로 메일을 보내고 있습니다.
큐를 쓰지 않고 이벤트로 메일이 보내지는 것은 확인하였습니다.
그런데 리스너에 implements ShouldQueue 만 붙이면 에러가 터집니다.
php artisan queue:work --tries=3 로 실행하였고요..
에러 내용은 이렇습니다.
코드는 :
라우터
이벤트
리스너