2016-03-04 14 views
7

Tôi có thể gửi tin nhắn đến một nhà môi giới tin nhắn sử dụng phương thức SimpMessagingTemplate#convertAndSendToUser hoặc SimpMessagingTemplate#convertAndSend mà không cần thiết lập nhà môi giới tin nhắn websử dụng @EnableWebSocketMessageBroker?Sử dụng SimpMessagingTemplate mà không cần tạo nhà môi giới tin nhắn ổ cắm mạng Spring 4

Những gì tôi đang cố gắng làm là sử dụng một máy chủ websocket để cung cấp thông điệp cho hai cá thể máy chủ ứng dụng (Một mùa xuân 4 và một Mùa xuân 3). Tôi đã tạo một máy chủ web với Spring 4, Spring boot plus websocket message broker được kích hoạt.

Bây giờ tôi muốn hai máy chủ ứng dụng đẩy tin nhắn đến rabbitmq để nó sẽ phát chúng cho khách hàng đã đăng ký với nó.

Vấn đề đầu tiên tôi phải đối mặt là nếu không có cấu hình nhà môi giới tin nhắn websockt, SimpMessagingTemplate sẽ không tự động nhận được ngữ cảnh ứng dụng. Tôi không thể tiêm nó mà không cần tạo một bảng thông báo websocket.

Hãy giúp tôi tìm hiểu xem điều này là có thể.

BTW Tôi có một số previous question chưa được trả lời liên quan đến vấn đề này.

+0

Tôi nghĩ rằng để gửi tin nhắn cho một nhà môi giới như thỏmq, bạn không nên sử dụng 'SimpMessagingTemplate' nhưng một' RabbitTemplate' –

+0

Có phải là trường hợp chung. Chúng ta sẽ có thể trực tiếp đẩy vào hàng đợi thỏmq. Trong Spring websocket, một phần đã bị ẩn ở đâu đó. Không thể tìm ra tên hàng đợi là gì .. Khi nhà môi giới tin nhắn được cấu hình, nó cung cấp một bean của lớp 'SimpMessagingTemplate' và hai phương thức của nó đẩy thông điệp vào môi giới thư. –

Trả lời

1

Vâng, Sau khi đọc nhiều tài liệu, tôi đã tự tìm thấy câu trả lời. Điều quan trọng là kiến ​​trúc này là sau.

enter image description here

Trong hành mùa xuân kiến ​​trúc như một cửa ngõ để giao tiếp giữa người môi giới thông điệp và khách hàng. Spring không làm bất cứ điều gì (khác hơn khi cần thiết) nhưng chuyển tiếp yêu cầu tới người môi giới tin nhắn (thông điệp STOMP). Cấu hình lưu giữ trên Spring định nghĩa vài điều quan trọng. Một là trao đổi và khác là các phím định tuyến. Cấu hình Spring cung cấp cho chúng ta một lớp trừu tượng, vì vậy chúng tôi đăng ký và đẩy các tin nhắn đến môi giới tin nhắn mà không bị phiền toái.

SimpMessagingTemplate là lớp trừu tượng mà chúng tôi sử dụng để liên lạc với nhà môi giới thư. Spring tạo bean bằng cách sử dụng các chi tiết đã cho. Vâng, tôi không thể tạo một thể hiện của SimpMessagingTemplate theo cách thủ công. Tôi phải cập nhật ứng dụng Spring 3 lên Spring 4 để sử dụng websockets.

Vì Spring và môi giới thư được tách riêng, phân cụm cá thể ứng dụng không tạo ra bất kỳ hiệu ứng nào trên môi giới thư. Spring sẽ chỉ liên lạc với nhà môi giới tin nhắn khi cần đăng ký kênh hoặc khi cần xuất bản tin nhắn lên kênh. Vì vậy, nếu có hai trường hợp đăng ký vào cùng một kênh thì sẽ có hai hàng đợi ràng buộc một trao đổi bằng cách sử dụng cùng một khóa định tuyến. Thư được xuất bản vào kênh sẽ có sẵn cho tất cả người đăng ký (hàng đợi) vì tất cả họ đều sử dụng cùng một khóa định tuyến. Tham khảo rabbitmq stop plugin documentation để biết thêm chi tiết mô tả.

Các vấn đề liên quan