Learn Rabbit MQ (P2)
I.Connection trong RabbitMQ
1. Connection có tác dụng gì- Như chúng ta tìm hiểu ở phần trước, đã biết được connection ở đâu và có tác dụng gì rồi chứ. Now, tôi sẽ không nói lại mà sẽ tiếp tục đi mổ xẻ sâu hơn một chút.
2. Cấu trúc của connection trong rabbitMQ
- Như các bạn để ý thấy rằng, trong connection thì có các channel.Vậy các channel có tác dụng làm gì và số lượng của nó là bao nhiêu.
- Một vài application cần có multiple connection trong đến broker.Tuy nhiên không ai mong muốn giữ quá nhiều kết nối TCP tại cùng 1 thời điểm bởi vì làm như vậy sẽ làm tiêu tốn tài nguyên hệ thống, cũng như làm khó khăn trong việc cấu hình tường lửa.Vì vậy nó sinh ra channel, nó có thể được xem là các kết nối con trong một kết nối TCP connection.
- Một client hoạt động kết nối trên 1 channel,chúng hoạt động hoàn toàn tách biệt nhau, vì thế mà mỗi channel đều có ID riêng. Một channel chỉ luôn ở trong 1 connection.Khi connection này đóng thì tất cả các channel trong connection đó cũng tự hủy. Chứ bình thường thì nó tồn tại trong thời gian dài và sẽ mất cho tới khi ta close nó.
3. Handle channel khi gặp sự cố:
- Channel có thể bị đóng bởi khi ta thực hiện thao tác close nó hoặc nó cũng có thể tự đóng khi connection bị exception.
- Trong một số case như vậy chúng ta có thể khôi phục lại nó, thử lại một số lần hoặc mở ra một channel khác thay thế. Các trường hợp phổ biến là:
- 406 PRECONDITION_FAILED:Khởi tạo Queue đã tồn tại rồi hoặc khai báo exchange không phù hợp.
- 403 ACCESS_REFUSED: truycập resource của user này là không được phép.
- 404 NOT_FOUND:
- Khi binding tới exchange hoặc queue không tồn tại
- Consume từ Queue không tồn tại.
- Publish tới Exchange không tồn tại.
- 405 RESOURCE_LOCKED:
- Truy cập vào Queue độc quyền từ một connection khác. Có nghĩa là chỉ được sử dụng như là consume, purged(lọc), deleted,... bởi chính connection đó. Vì vậy mà nếu sử dụng an attempt hoặc connection khác chúng ta sẽ nhận được RESOURCE_LOCKED cùng với message error: cannot obtain exclusive access to locked queue .
- Và nếu sử dụng Queue độc quyền(excluse) thì queue sẽ bị xóa nếu chúng ta thực hiện close connection. Nó chỉ phù hợp đối với client connect nhất thời. Thông thường độc quyền Queue là tên máy chủ.
- Lưu ý rằng, khi rabbitMQ đóng một channel, thì nó sẽ thông báo client rằng đang sử dụng phương thức giao thức bất đồng bộ.Nói cách khác, nếu có sự cố đối với channel, thì nó sẽ bị đóng ngay lập tức.
4. Maximum number of channels trong mỗi connection:
- Số kết nối tối của channel default tới server cùng 1 lúc là 100. Nó được cấu hình cả hai: RabbitMQ và client libraries.
channel_max = 100
II. Exchange trong Broker Message
1. Exchange có tác dụng gì
- Khi producer publish message vào trong rabbitMQ, thì message được nhận bởi exchange.Sau đó send bản coppy message này tới queue theo quy định của exchange.
- Trong RabbitMQ gồm có 4 quy định được định nghĩa sẵn.
- Direct
- Message sẽ được send tới queue đúng connection nào đã bind tới queue này.
- Nếu giả sử có 2 queues cùng bind tớiexchange này thì sao?. Đó chính là nhờ vào routing key, nó chịu trách nhiệm dẫn đường message tới queue nào.
- Nó sẽ chỉ dẫn message tới queue nào có Routing key giống nhau.
- Fanout
- Không cần routing key. Nó sẽ broadcast tới tất cả các queue.
- Topic
- routing key with patterns: * or #. Nếu # : 1 hoặc n từ. *: only 1 từ.
- Khi exchange nhận message, nó sẽ check routing key của message và compare routing key của queue và gởi bản coppy message tới tất cả các queue có routing keys
- Headers
- Tương tự với topic, thay vì sử dụng routing key thì send attributes vào trong headers. Khi đó nó sẽ compare với các tham số đượcđịnh nghĩa trướckhi chúng ta bind queue. Chúng ta có thể tự tạo các quy luật riêng,
Với routing message được khai báo ở trên thì message sẽ đi vào queue: 1, 3,4. Queue 2 không thỏa.


Nhận xét
Đăng nhận xét