шаг
Выше мы говорили об аннотации Sentinel @SentinelResource и ее обработке решения об исключении.
Если каждый интерфейс обрабатывается отдельно, это будет неудобно, поэтому мы можем интегрировать openfeign для обработки текущей стратегии ограничения и понижения унифицированным образом.
Шаг 1. Включите симуляцию для Sentinel.
feign:
sentinel:
enabled: true
Шаг 2: Напишите итоговый план
import com.ossa.feign.api.producer.ProducerFeign;
import org.springframework.stereotype.Service;
/**
* @author issavior
*/
@Service
public class ProducerFeignFallback implements ProducerFeign {
@Override
public String producerById(String id) {
String msg = "fallback限流方法";
return id + msg;
}
}
Шаг 3. Измените аннотацию @FeignClient.
import com.ossa.feign.config.FeignClientConfig;
import com.ossa.feign.fallback.ProducerFeignFallback;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
/**
* @author issavior
*/
@FeignClient(value = "ossa-service-producer", configuration = FeignClientConfig.class,fallback = ProducerFeignFallback.class)
public interface ProducerFeign {
/**
* 根据ID查询商品
*
* @param id 商品的主键ID
* @return 相关商品的信息
*/
@GetMapping(value = "/producer/{id}")
String producerById(@PathVariable("id") String id);
}
вопрос
Описание проблемы:
Вызвано: java.lang.IllegalStateException: неоднозначное сопоставление
анализировать:
Использование аннотации @RequestMapping в интерфейсе feign вызовет эту проблему.
Контроллер, запрос уровня управления, отображает два метода и повторяется в Контроллере, поэтому сообщается об ошибке. Другими словами, если в проекте есть два абсолютно одинаковых @RequestMapping("/xxx"), будет сообщено об исключении java.lang.IllegalStateException, а модуль, в котором расположен контроллер, зависит от модуля, в котором находится клиент. расположено, чтобы вызвать конфликт.
решение:
удалить @RequestMapping