का उपयोग करते हुए असिंक एपीआई मैं एपीआई बिल्डिंग पर काम कर रहा हूं जो संभावित रूप से प्रति सेकेंड की उच्च संख्या में अनुरोध कर सकता है, और कुछ अनुरोधों में बहुत अधिक गणना (जटिल रिपोर्ट) की आवश्यकता हो सकती है। मुझे अवधारणा के सबूत के रूप में एक छोटा प्रोटोटाइप एक साथ रखने के लिए कहा गया है। मैं अपने जेएक्स-आरएस कार्यान्वयन के रूप में जर्सी के साथ स्प्रिंग बूट का उपयोग कर रहा हूं। अतीत में मैंने स्प्रिंग एमवीसी के साथ ऐसा कुछ किया है।स्प्रिंग + जर्सी
@RequestMapping(value = "/dashboard", method = RequestMethod.GET)
public DeferredResult<String> showDashboard(Model model) {
DeferredResult<String> result = new DeferredResult<>();
model.addAttribute("testObj", new User());
result.setResult("home/dashboard");
return result;
}
मैंने जर्सी के साथ यह कोशिश की और काम करने लगते हैं, या कम से कम यह एक त्रुटि नहीं फेंक दिया।
@GET
public DeferredResult<String> getClients() {
DeferredResult<String> deferredResult = new DeferredResult<>();
deferredResult.setResult("Nothing! But I'm Async!");
return deferredResult;
}
हालांकि जर्सी में अतुल्यकालिक संचालन को संभालने के लिए मैंने जो भी उदाहरण देखे हैं, वे इस तरह दिखते हैं।
Produces(MediaType.TEXT_PLAIN)
public void get(@Suspended final AsyncResponse response) {
// This call does not block.
client.callExternalService(
// This callback is invoked after the external service responds.
new Callback<string>() {
public void callback(String result) {
response.resume("Result: " + result + ".n");
}
});
}
मेरा मुख्य सवाल पर्दे के पीछे क्या इन तीन कोड के टुकड़े के बीच का अंतर है, अगर वहाँ भी किसी भी है। क्या ये सब एक ही चीज़ पूरा करेंगे?
क्या एसिंक को पूरा करने का कोई बेहतर तरीका है? मैंने जावा में भविष्य का उपयोग भी देखा है, लेकिन इसका कभी भी उपयोग नहीं किया।
अद्यतन:
मैं अपने जर्सी नियंत्रक में निम्न कोड है जो सभी काम कर रहा है।
@GET
public String getClients() {
return "Nothing, I'm Sync!";
}
@GET
@Path("/deferred")
public DeferredResult<String> getClientsAsync() {
DeferredResult<String> deferredResult = new DeferredResult<>();
deferredResult.setResult("Nothing! But I'm Async!");
return deferredResult;
}
@GET
@Path("/async")
public void getClientsJAXRSAsync(@Suspended AsyncResponse response) {
new Thread(() -> {
response.resume("I am Async too! But I am using @Suspended");
}).start();
}
जो मेरे मुख्य प्रश्न पर वापस जाता है, इनके बीच क्या अंतर है? मेरी समझ है DeferredResult एक वसंत चीज है इसलिए यह सुनिश्चित नहीं है कि जर्सी के साथ उपयोग करने के लिए उपयुक्त है, हालांकि मैं जर्सी + वसंत का उपयोग कर रहा हूं।
यह मेरे पोस्ट किए गए प्रश्न में से एक है। इसे देखें .. http://stackoverflow.com/questions/29563475/null-pointer-exception-in-resteasy-asynchronous-request नोट: मैंने अभी भी परीक्षण नहीं किया है कि प्रस्तावित उत्तर काम कर रहा है .. –