Yaylı bulut başlatıcısını kullanıyorum (örn. Tüm önyükleme özelliklerine sahip yaylı önyükleme). Javanica @HystrixCommand kullanılarak açıklanmış bir bileşendeki hystrix yöntemini oluşturduğumda, 'Gelecekteki <>' veya Reaktif yürütme 'Gözlemlenebilir < kullanıp kullanmadığımı dikkate almadan, bu yöntemin uyumsuz çalışmasını sağlamak için javanica github sitesindeki (https://github.com/Netflix/Hystrix/tree/master/hystrix-contrib/hystrix-javanica) yönergeleri izleyin. > ', hiçbir şey çalıştırılamaz/yürütür ve ben sonucu çekmeye çalıştığımda (Gelecek <>>) veya bir geri arama (her zaman Çalıştır)' i çalıştırmaya çalıştığımda
java.lang.ClassCastException: springbootdemo.EricComponent$1 cannot be cast to springbootdemo.Eric
aldım.). javanica içinde Hystrix async yöntemleri, ilkbahar-önyükleme java uygulamasında çalışmaz.
public class Application { ...
}
@RestController
@RequestMapping(value = "/makebunchofcalls/{num}")
class EricController { ..
@RequestMapping(method={RequestMethod.POST})
ArrayList<Eric> doCalls(@PathVariable Integer num) throws IOException {
ArrayList<Eric> ale = new ArrayList<Eric>(num);
for (int i =0; i<num; i++) {
rx.Observable<Eric> oe = this.ericComponent.doRestTemplateCallAsync(i);
oe.subscribe(new Action1<Eric>() {
@Override
public void call(Eric e) { // AT RUNTIME, ClassCastException
ale.add(e);
}
});
}
return ale;
}
@Component
class EricComponent { ...
// async version =========== using reactive execution via rx library from netflix ==============
@HystrixCommand(fallbackMethod = "defaultRestTemplateCallAsync", commandKey = "dogeAsync")
public rx.Observable<Eric> doRestTemplateCallAsync(int callNum) {
return new ObservableResult<Eric>() {
@Override
public Eric invoke() { // NEVER CALLED
try {
ResponseEntity<String> result = restTemplate.getForEntity("http://doges/doges/24232/photos", String.class); // actually make a call
System.out.println("*************** call successfull: " + new Integer(callNum).toString() + " *************");
} catch (Exception ex) {
System.out.println("=============== call " + new Integer(callNum).toString() + " not successfull: " + ex.getMessage() + " =============");
}
return new Eric(new Integer(callNum).toString(), "ok");
}
};
}
public rx.Observable<Eric> defaultRestTemplateCallAsync(int callNum) {
return new ObservableResult<Eric>() {
@Override
public Eric invoke() {
System.out.println("!!!!!!!!!!!!! call bombed " + new Integer(callNum).toString() + "!!!!!!!!!!!!!");
return new Eric(new Integer(callNum).toString(), "bomb");
}
};
}
}
yerine neden bir
Eric
bir
EricComponent$1
geri almak olacaktır? btw,
Eric
sadece 2 telli basit bir sınıfa ait. > 1) Future < ile de genişlemiş> kuyruğu() yöntemiyle ilgili belgeler iddia ettiği gibi kullanılamaz ve 2) gözlemlenebilir < ile yapıyor:
Ben açıkça yürütmek için gereken bulmaktan, fakat bu beni ima Bunu gerçekleştirmem için gerçekten bir yol yok.
Teşekkürler @spencergibb bunun için harcadığınız süre boyunca. @EnableHystrix .. 'i kullandım ve öntanımlı olarak' Gözlemlenebilir 'yerine 'Eric' 'i değiştirmek için ClassCastException'dan kaçınmayı başardı. Birisi bunu belirtmek için Javanica belgelerini güncellemelidir. Ancak, bunu çalıştırdığımda tüm "çağrı bomba" println's alırsınız. Artı '' invoke() 'yöntemi 'Gözlemleniyor ''de döndürülür hala idam edilmez. –
RubesMN
Güncelleme # 3'e göre, EricComponent'i kendi dosyasına ayıranın mükemmel bir şekilde çalıştığı ortaya çıkıyor. Her şey şimdi koşuyor. Buna ek olarak, BlockingObservables ile engellemeye geçiş ve düzenli Gözlemciler aracılığıyla engellememe çalışmaları da bana POC'im için gerekenleri sağlar. @spencergibb için tekrar teşekkürler. – RubesMN