2017-04-06 11 views
5

Tôi có google về hỗ trợ mùa xuân năm servlet 3.0/3.1 đặc điểm kỹ thuật và hầu hết các thông tin tôi đã tìm thấy bài viết này: Understanding Callable and Spring DeferredResultCó analog của AsyncContext trong MVC mùa xuân (làm thế nào để viết phản ứng http trong chủ đề khác)

Ở đây tác giả nói rằng bạn có thể trả về Callable hoặc DefferedResult từ bộ điều khiển và cho biết đó là servlet 3.0/3.1 duy trì vào mùa xuân.

Nhưng tôi không hiểu làm thế nào để áp dụng nó trong hoàn cảnh của tôi:

tôi có hệ thống bên ngoài và tôi nhận được kết quả từ hệ thống này asynchrounously.

Trong điều khiển tôi viết một cái gì đó như thế này:

externalSystenm.send(requestId, message); 

và tôi có thread khác mà tôi nhận được kết quả:

Message m = externalSystem.get(); 
m.getRequestId();// According this id I can map message to request 

Tôi biết rằng trong servlet API tôi cho phép để lưu asyncContext trong bản đồ và sau đó tìm thấy nó.

Làm cách nào tôi có thể đạt được nó vào mùa xuân?

Trả lời

3

Tôi đã tìm thấy sau bài viết: Spring MVC 3.2 Preview: Introducing Servlet 3, Async Support

dụ:

@RequestMapping("/quotes") 
@ResponseBody 
public DeferredResult<String> quotes() { 
    DeferredResult<String> deferredResult = new DeferredResult<String>(); 
    // Add deferredResult to a Queue or a Map... 
    return deferredResult; 
} 


// In some other thread... <-- important phrase 
deferredResult.setResult(data); 
// Remove deferredResult from the Queue or Map 
+0

Tôi nghĩ rằng bạn đã trả lời câu hỏi của riêng bạn. bất cứ khi nào bạn nhận được thông báo từ hệ thống bên ngoài, bạn chỉ cần đặt nó trong deferredResult và DeferredResult sẽ vẫn được chia sẻ giữa các luồng. khi luồng kết quả sẽ đúng kết quả trên kết quả trả về, nó sẽ có sẵn như là một phản hồi. –

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