मैं स्प्रिंग 4 (टॉमकैट 7, सर्वलेट-एपीआई 3.0.1) के साथ सर्वर से भेजे गए ईवेंट बनाने की कोशिश कर रहा हूं।स्प्रिंग एसएसईमीटर, विधि भेजने के बाद ईवेंट नहीं भेजे जाते हैं
समस्या यह है कि मेरी Events
विधि भेजने के बाद सही नहीं भेजा गया है। वे सभी के समय के बाद, केवल EventSource
की त्रुटि घटना के साथ क्लाइंट के साथ-साथ एक ही टाइमस्टैम्प के साथ आते हैं। और फिर ग्राहक फिर से कनेक्ट करने की कोशिश कर रहा है। कोई विचार क्या हो रहा है?
sse = new EventSource(urlBuilder(base, url));
sse.addEventListener('ping', function (event) {
dfd.notify(event);
});
sse.addEventListener('message', function(event){
dfd.notify(event);
});
sse.addEventListener('close', function(event){
dfd.notify(event);
});
sse.onerror = function (error) {
console.log(error);
};
sse.onmessage = function (event){
dfd.notify(event);
};
अनुप्रयोग initalizer कोड
public class WebAppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(AppConfig.class);
ctx.setServletContext(servletContext);
ctx.refresh();
ServletRegistration.Dynamic dynamic = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));
dynamic.setAsyncSupported(true);
dynamic.addMapping("/api/*");
dynamic.setLoadOnStartup(1);
dynamic.setMultipartConfig(ctx.getBean(MultipartConfigElement.class));
javax.servlet.FilterRegistration.Dynamic filter = servletContext
.addFilter("StatelessAuthenticationFilter",
ctx.getBean("statelessAuthenticationFilter", StatelessAuthenticationFilter.class));
filter.setAsyncSupported(true);
filter.addMappingForUrlPatterns(null, false, "/api/*");
filter = servletContext.addFilter("HibernateSessionRequestFilter",
ctx.getBean("hibernateSessionRequestFilter", HibernateSessionRequestFilter.class));
filter.setAsyncSupported(true);
filter.addMappingForUrlPatterns(null, false, "/api/user/*");
}
}
AppConfig.java
@Configuration
@ComponentScan("ru.esoft.workflow")
@EnableWebMvc
@PropertySource({"classpath:mail.properties", "classpath:fatclient.properties"})
@EnableAsync
@EnableScheduling
public class AppConfig extends WebMvcConfigurerAdapter {
...
}
0:
@RequestMapping(value = "subscribe", method = RequestMethod.GET)
public SseEmitter subscribe() throws IOException {
final SseEmitter emitter = new SseEmitter();
Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
try {
emitter.send(SseEmitter.event().data("Thread writing: " + Thread.currentThread()).name("ping"));
} catch (Exception e) {
}
}
} , 1000, 1000, TimeUnit.MILLISECONDS);
return emitter;
}
ग्राहक कोड के साथ
:
मैं एक साधारण सेवा बनाया है
मैं एक ऐसी ही समस्या थी। हालांकि, https://jira.spring.io/browse/SPR-14578 पढ़ने के बाद मैंने इसे 'थ्रेड' और 'थ्रेड.स्टार्ट()' के साथ आज़माया, और ऐसा लगता है कि समस्या गायब हो गई, लेकिन मुझे नहीं पता सच में, क्यों। वैसे भी, मुझे लगता है कि यह अजीब है अगर यह आरएक्सजेवा के साथ संयोजन में काम करता है, हालांकि यह निश्चित रूप से एक बेहतर दृष्टिकोण है। – user140547
मैं इस के लिए एक जेरा सुधार (https://jira.spring.io/browse/SPR-15299) बनाता हूं क्योंकि मेरे पास एक ही समस्या है। चलो देखते हैं कि यह कैसे जाता है ... – cristi
मेरे मामले में यह पता चला कि ब्राउज़र और टोमकैट के बीच आईआईएस बैठा था समस्या (रिपोर्ट की गई बग पर मेरी पिछली टिप्पणी का पालन करें और आपको पूर्ण स्पष्टीकरण मिलेगा)। – cristi