1. เมื่อใช้ Feign เพื่อโทรออกให้ใช้วิธีการที่สืบทอดมาเพื่อโทรหาบริการ เมื่อเข้าร่วมการกำหนดค่าการประมวลผลทางเลือกในการประมวลผลทางเลือกของ Hystrix ของ Hystrix จะมีการรายงานข้อผิดพลาดและได้รับการแก้ไขแล้ว 2. ใช้การกำหนดค่าเริ่มต้นปลอมตัวเบรกเกอร์ไม่มีผลและได้รับการแก้ไขแล้ว
เมื่อเร็ว ๆ นี้ฉันได้เรียนรู้เกี่ยวกับ Microservices และพบว่าเมื่อใช้ Feign เพื่อโทรออกฉันใช้มรดกเพื่อเรียกบริการ เมื่อเพิ่มการกำหนดค่าการประมวลผลทางเลือกในการประมวลผลทางเลือกของเบรกเกอร์ของ Hystrix จะมีการรายงานข้อผิดพลาด รหัสมีดังนี้:
@RequestMapping ("/demo/api") อินเตอร์เฟสสาธารณะ helloapi {@getMapping ("user/{id}") ผู้ใช้ getUserById (@PathVariable ("ID") Long ID); @GetMapping ("hello") string echo (@requestparam ("ชื่อ") ชื่อสตริง);} @feignClient (value = "ms-server", fallback = consumerfeignservicefallback.class) ส่วนต่อประสานสาธารณะ ConsumerFeignService ขยาย Helloapi {} @ComponentPublic Class ConsumerFeignServiceFallback ใช้ ConsumerFeignService {@Override ผู้ใช้สาธารณะ GetUserById (Long ID) {ส่งคืนผู้ใช้ใหม่ (); } @Override สตริงสาธารณะ echo (ชื่อสตริง) {return "echo error:" + name; -มีการรายงานข้อผิดพลาดดังนี้:
เกิดจาก: java.lang.illegalstateException: การทำแผนที่ที่ไม่ชัดเจน ไม่สามารถแมป 'com.thoughtworks.demo.consumer.service.consumerfeignservice'
บทคัดย่อสาธารณะ java.lang.string com.thoughtworks.demo.api.helloapi.echo (java.lang.string)
ถึง {[/demo/api/hello], methods = [get]}: มี 'consumerfeignservicefallback' แล้ววิธีการถั่ว '
สาธารณะ java.lang.string com.thoughtworks.demo.consumer.service.consumerfeignservicefallback.echo (java.lang.string) แมป
ที่ org.springframework.web.servlet.handler.abstracthandlermethodmapping $ mappingregistry.assertuniquemethodmapping (abstracthandlermethodmapping.java:576) ~
ที่ org.springframework.web.servlet.handler.abstracthandlermethodmapping $ mappingregistry.register (abstracthandlermethodmapping.java:540) ~ [Spring-Webmvc-4.3.14.
ที่ org.springframework.web.servlet.handler.abstracthandlermethodmapping.registerhandlermethod (abstracthandlermethodmapping.java:264) ~ [Spring-Webmvc-4.3.14.
ที่ org.springframework.web.servlet.handler.abstracthandlermethodmapping.detecthandlermethods (abstracthandlermethodmapping.java:250) ~ [Spring-Webmvc-4.3.14.
ที่ org.springframework.web.servlet.handler.abstracthandlermethodmapping.inithandlermethods (abstracthandlermethodmapping.java:214) ~ [Spring-Webmvc-4.3.14.
ที่ org.springframework.web.servlet.handler.abstracthandlermethodmapping.afterpropertiesset (abstracthandlermethodmapping.java:184) ~ [Spring-Webmvc-4.3.14.
ที่ org.springframework.web.servlet.mvc.method.annotation.requestmappinghandlermapping.afterpropertiesset (requestmappinghandlermapping.java:127) ~ [Spring-webmvc-4.3.14.
ที่ org.springframework.beans.factory.support.abstractautautowirecapablebeanfactory.invokeinitmethods (AbstractautautowirecapableBeanfactory.java:1687) ~ [Spring-Beans-4.3.14.
ที่ org.springframework.beans.factory.support.abstractautautowirecapablebeanfactory.initializebean (AbstractautautowirecapableBeanfactory.java:1624) ~ [Spring-Beans-4.3.14.
... 21 เฟรมทั่วไปที่ถูกละเว้น
เหตุผลข้อผิดพลาดคือคลาสอินเตอร์เฟสที่สืบทอดมาที่นี่คืออินเทอร์เฟซคอนโทรลเลอร์ซึ่งจะสืบทอดจากคลาสพาเรนต์เมื่อสืบทอด
@requestmapping ("/demo/api")เมื่อ SpringMVC กำลังทำแผนที่พบว่าการทำแผนที่ระหว่าง ConsumerFeignService และ ConsumerFeignServiceFallback กลับถูกทำซ้ำดังนั้นจึงมีข้อยกเว้นถูกโยนทิ้งไป วิธีแก้ปัญหา?
มี 2 วิธีแก้ปัญหา:
ขั้นแรกให้เปลี่ยนการกำหนดค่าการแมปของ ConsumerFeignServiceFallback รหัสมีดังนี้:
@component @requestmapping ("Fallback/Demo/API") คลาสสาธารณะ CensumerFeignServiceFallback ใช้ consumerFeignService {@Override ผู้ใช้สาธารณะ GetUserById (Long ID) {return user ใหม่ (); } @Override สตริงสาธารณะ echo (ชื่อสตริง) {return "echo error:" + name; -ประการที่สองคือการใช้ FallbackFactory รหัสมีดังนี้:
@ComponentPublic Class ConsumerFeignServiceFallback ดำเนินการโดยใช้ fallbackFactory <ConsumerFeignService> {@Override Public ConsumerFeignService สร้าง (สาเหตุที่ทำให้เกิดได้) {ส่งคืนผู้บริโภคใหม่ Service () {@Override ผู้ใช้สาธารณะ GetUserByid } @Override สตริงสาธารณะ echo (ชื่อสตริง) {return "echo error:" + name; - -หลังจากวิ่งฉันปิดผู้ให้บริการและพบว่าฟิวส์ไม่มีผล ฉันไม่ได้ป้อนวิธีทางเลือกเช่นใช้ @hystrixCommand เพียงอย่างเดียว ฉันตรวจสอบวิธีการหลายวิธีและพบว่าสวิตช์การกำหนดค่าของ Hystix ซึ่งเดิมถูกแสร้งทำเป็นไม่เปิด
วิธีแก้ปัญหา: เพิ่มการกำหนดค่าใน Application.yml ดังต่อไปนี้:
Feign: Hystrix: เปิดใช้งาน: จริง
ไม่มีการแจ้งเตือนสำหรับการกำหนดค่านี้ใน INTELLIJ Idea และมีการรายงานคำเตือน ฉันไม่รู้ว่ามันถือเป็นข้อผิดพลาดหรือไม่ เวอร์ชันที่ฉันใช้ที่นี่คือ
SpringBootVersion = '1.5.10.release'SpringCloudVersion =' edgware.sr3 '
ข้างต้นเป็นข้อผิดพลาดเล็ก ๆ ที่ฉันพบเมื่อใช้แสร้งทำเป็น ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น